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连接失败了。它只是重新连接到原始目录/客户端,而不是新目录。
有什么想法吗?
答案 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();