2

此代码未能识别它似乎识别的任何键:

if( $key =~ /upsf|free|ground|sla|pickup|usps/ )

所以我将其更改为:

    if( $key eq 'upsf' || $key eq 'free' 
    || $key eq 'ground' || $key eq 'sla' 
    || $key eq 'pickup' || $key eq 'usps' )

在我看来,它们在功能上是等效的,所以我试图找出第一个失败的原因。它是 Windows 7 上 XAMPP 下的 Perl,但它也是 Linux 机器上 Apache2 下的 Perl。

这会在 Windows 和 Linux 上打印“搁置它”。

$key = 'upsf';
if( $key =~ /^(upsf|free|ground|sla|pickup|usps)$/ ) {
    print 'ship it';
} else {
    print 'shelf it';
}
4

3 回答 3

3

它们不是等价的,因为第一个比较运算符是“=~”(“包含”),而第二个是“eq”(“显式匹配,等于”)。

第一个究竟是如何失败的?$key 的测试值是多少?

$key = 'xxx';
if( $key =~ /upsf|free|ground|sla|pickup|usps/ ) {
    print 'ship it';
} else {
    print 'shelf it';
}

将打印“搁置它”。例如, $key='xusps' 将打印 'ship it',通过 '=~' 运算符(“包含”)进行匹配,这可能不是您的目标。

于 2012-07-26T17:59:07.900 回答
0

我的错!

此代码由 ClickCart Pro 执行,它从文件中读取它并像这样对其进行预处理:

$custom_script_code =~ s/\`/\'/gs;
$custom_script_code =~ s/\|\|/%7C%7C/g;
$custom_script_code =~ s/\|/ /gs;
$custom_script_code =~ s/%7C%7C/\|\|/g;
$custom_script_code =~ s/system/System/gs;
$custom_script_code =~ s/exec/Exec/gs;
$custom_script_code =~ s/die/Die/gs;

所以管道被这里的第三个语句删除。感谢氪金!(讽刺)perreal 的评论已被加分。我不应该得到任何分数。对不起浪费了大家的时间!

于 2012-07-27T21:03:33.633 回答
0

这个怎么样:

if ($key =~ /^(?:upsf|free|ground|sla|pickup|usps)$/) {
  # ...
} else {
  # ...
} 
于 2012-07-27T14:10:23.287 回答