如何使用p4perl更改P4客户端

时间:2018-05-23 19:56:03

标签: perforce

Perorce on RHEL6:Rev。P4 / LINUX26X86_64 / 2011.1 / 393975(2011/12/16)。

在使用p4perl的perl脚本中,我想更改当前的客户端,只知道我要移动到的linux目录。

所以我在/ proj / me / workarea中运行perl脚本,我可以使用...连接到客户端。

use P4;
our $p4 = new P4;
$p4->disconnect();
$p4->SetCwd($ENV{PWD});
$p4->connect();

但现在我转移到一个映射到不同P4客户端的新目录。让我们称之为“/ proj / me / different_workarea”。无论如何我需要搬到那里,所以我......

chdir("/proj/me/diffent_workarea");

但是使用上面的代码尝试与这个新区域建立新的P4连接失败了。它只是重新连接到原始目录/客户端,而不是新目录。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

chdir()不会更新$PWD - 您需要自行更新,或者不要依赖其价值。

答案 1 :(得分:1)

正如@Sam Stafford所说,chdir()没有更新$PWD。 p4perl和p4二进制文件(如果您将其作为子进程调用)都会从$PWD检测当前工作目录,而不是从Perl' s getcwd()调用Cwd {1}}模块(或getcwd系统调用)。

我发现的最优雅的解决方案是致电use Cwd qw(chdir);。事实证明,Cwd模块有自己的chdir()函数变体,它会更新$PWD变量。事实上,Cwd explicitly states this的文档:

  

$ ENV {PWD}

     

如果要求覆盖chdir()内置函数,

use Cwd qw(chdir);
     

然后您的PWD环境变量将保持最新。请注意,如果所有使用chdir的软件包都从Cwd导入它,它将只保持最新。

答案 2 :(得分:0)

这有效......

use P4;
our $p4 = new P4;   <----------   
$p4->disconnect();
$p4->SetCwd($ENV{PWD});
$p4->connect();