gpt4 book ai didi

Perl 脚本适用于 5.8.4 和 5.12.4 但不适用于 5.10.0

转载 作者:行者123 更新时间:2023-12-01 06:39:27 24 4
gpt4 key购买 nike

我有来自用户的以下脚本。在 perl 5.8.4 和 5.12.4 上运行时,它会打印 1,但在 5.10.0 中不会(打印 0)。

perl  -e ' my $a=0; my $net="<*2>ColBnk<2"; if (($net =~ s/([(<])/$1/g) != ($net =~ s/([>)])/$1/g)){$a++} print $a;'

这是代码的问题吗(比较字符串变量与 != 而不是 ne 或者这可能是由于 $a++ 之后缺少分号)。我试图通过打印 ( $net =~ s/([(<])/$1/g ) 和 ( $net =~ s/([>)])/$1/g ) 的值来调试它,并且两者都打印相同的值。请引用以下代码

use strict;
use warnings;


#/mu/bin/perl -e '
my $a=0;
my $net="<*2>ColBnk<2";

my $test="<*2>ColBnk<2";
$test =~ s/([(<])/$1/g;
print "\n$test" ;
$test =~ s/([>)])/$1/g;
print "\n$test" ;

if (($net =~ s/([(<])/$1/g) ne ($net =~ s/([>)])/$1/g)){$a++;}

print "\n Value of a =$a";

#'

您能否提供任何指示。谢谢你的帮助,阿什什

最佳答案

我可以确认它在 5.8.9 和 5.14.2 中有效,但在 5.10.0 中无效。它一定是在 5.8 和 5.10 之间引入的错误,随后被修复。我用 Porting/bisect.pl 找出它坏了的地方。它是 this commit ,这是在 Perl 5.9.4 中引入的。然后由 this commit 修复,这是在 Perl 5.10.1 中引入的。

当我尝试使用 bisect.pl 时,我不断收到需要安装 C 编译器的错误消息(即使我确实安装了一个)。事实证明,bisect.pl 没有使用 Perl 的 Configure 脚本的正常编译器检测(大概是为了节省时间)。如果默认不起作用,则需要使用 bisect.pl 的 -D 选项进行设置。 (例如,我使用了 -D{cc,ld}=/usr/bin/gcc)。

您可以通过执行以下步骤找到引入错误的确切更改:

$ git clone git://perl5.git.perl.org/perl.git
$ mkdir perl-bisect
$ cd perl
$ cp -a Porting/bisect* ../perl-bisect/
$ ../perl-bisect/bisect.pl --target=miniperl --end=v5.10.0 --start=perl-5.8.4 \
-e 'my $a=0; my $net="<*2>ColBnk<2"; if (($net =~ s/([(<])/$1/g) != ($net =~ s/([>)])/$1/g)){$a++} die unless $a;'

如果您必须使用 Perl 5.10.0,那么您可以通过将每个 s///g 的结果存储到一个临时变量中,然后比较两个变量来解决该错误:

perl -e 'my $a=0; my $net="<*2>ColBnk<2"; my $x = ($net =~ s/([(<])/$1/g); my $y = ($net =~ s/([>)])/$1/g); if ($x != $y){$a++} print $a;'

但更好的解决方案是升级到固定版本。 Perl 5.10 正式报废,但如果您不想进行大的更改,可以安装 5.10.1。或者您可以升级到 5.12 或 5.14。

关于Perl 脚本适用于 5.8.4 和 5.12.4 但不适用于 5.10.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8090826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com