Perforce 如何使用p4perl更改P4客户机
对RHEL6的监督:修订版。P4/LINUX26X86_64/2011.1/393975(2011/12/16) 在使用p4perl的perl脚本中,我想更改当前客户机,使其只知道我要移动到的linux目录 因此,我在/proj/me/workarea中运行perl脚本,并能够使用Perforce 如何使用p4perl更改P4客户机,perforce,Perforce,对RHEL6的监督:修订版。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(); 但现在我转到一个新的dir
use P4;
our $p4 = new P4;
$p4->disconnect();
$p4->SetCwd($ENV{PWD});
$p4->connect();
但现在我转到一个新的dir,它映射到另一个P4客户机。我们称之为“/proj/me/different_workarea”。反正我要搬到那里去,所以我
chdir("/proj/me/diffent_workarea");
但是,尝试使用上述代码与这个新区域建立新的P4连接失败。它只是重新连接到原始的目录/客户机,而不是新的目录/客户机
有什么想法吗 chdir()
不更新$PWD
——您需要自己更新它,或者不依赖它的值。这起作用了
use P4;
our $p4 = new P4; <----------
$p4->disconnect();
$p4->SetCwd($ENV{PWD});
$p4->connect();
使用P4;
我们的$p4=新的p4;断开连接();
$p4->SetCwd($ENV{PWD});
$p4->connect();
正如@Sam Stafford所说,chdir()
不会更新$PWD
。p4perl和p4
二进制文件(如果将其作为子进程调用)都从$PWD
检测当前工作目录,而不是从Perl的Cwd
模块(或getcwd
系统调用)调用getcwd()
我发现最优雅的解决方案是调用use-Cwd-qw(chdir)代码>。原来,Cwd
模块有它自己的chdir()
函数的变体,它会更新$PWD
变量。实际上,Cwd
的文档:
$ENV{PWD}
如果要求重写chdir()内置函数
use Cwd qw(chdir);
然后您的PWD环境变量将保持最新。请注意,只有当所有使用chdir的包都从Cwd导入它时,它才会保持最新
不清楚你修了什么。此代码段与原始描述中的代码段相同。您突出显示了new
调用,但该调用已经存在。哦,是的,代码片段是相同的,但在实际代码中,“$p4=new p4”最初是全局的,声明了一次并打算重用。一个子例程执行了disconnect->SetCwd->connect。我所做的更改是(重新)在子例程中创建$p4。。。每次都能有效地重新创造它。我将尝试“使用Cwd qw(chdir)”(我更喜欢它),如果它有效的话就使用它。