两个分支之间的非集成变更列表

tom*_*tom 0 perl perforce

当我在命令行中使用以下命令时,它给出了非集成更改列表的列表.

p4 interchanges -t $branch1 @$date1, @$date2 $branch2 > changes.txt
Run Code Online (Sandbox Code Playgroud)

但是,当我在Perl脚本中使用此命令时,如下所示,它不提供输出:

$cmd = system ("p4 interchanges -t $branch1 @$date1, @$date2 $branch2 > changes.txt");
Run Code Online (Sandbox Code Playgroud)

命令行中的输出消息是一些错误,如下所示:

branch1, - all revision(s) already integrated.
Run Code Online (Sandbox Code Playgroud)

问题是因为date1和date2之间使用了逗号?如何在Perl脚本中使用此命令?

Cha*_*ens 7

这就是为什么打开strictwarningspragma 是如此重要.字符串"@ $ date1"并不代表您的想法.它试图取消引用$data1作为一个数组.因为strict不是它所以将内容$date1视为一个象征性的参考.如果您已打开,strict则会看到如下错误消息:

Can't use string ("2010-08-30") as an ARRAY ref while "strict refs" in use at script.pl line 10.
Run Code Online (Sandbox Code Playgroud)

你应该这样说:

system "p4 interchanges -t $branch1\@$date1,\@$date2 $branch2 > changes.txt";
if ($?) {
    die "saw exit code: ", $? >> 8;
}
Run Code Online (Sandbox Code Playgroud)

如果你希望你也可能有问题$branch1,$date1等是shell变量,而不是Perl的变量.在这种情况下,你应该说:

system "p4 interchanges -t $ENV{branch1}\@$ENV{date1},\@$ENV{date2} $ENV{branch2} > changes.txt";
if ($?) {
    die "saw exit code: ", $? >> 8;
}
Run Code Online (Sandbox Code Playgroud)