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 の両方で「shelf it」が出力されます。

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

3 に答える 3

3

最初の比較演算子は「=~」(「含む」) であり、2 番目の比較演算子は「eq」(「明示的な一致、等しい」) であるため、それらは等価ではありません。

最初のものはどのように正確に失敗しましたか?$key のテスト値はいくつでしたか?

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

'shelf it' と表示されます。たとえば、 $key='xusps' は 'ship it' を出力しますが、'=~' 演算子 ("contains") を介して一致しますが、これは目的ではない可能性があります。

于 2012-07-26T17:59:07.900 に答える
0

私の悪い!

このコードはClickCartProによって実行され、ファイルからコードを読み取り、次のように前処理します。

$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;

したがって、パイプはここの3番目のステートメントによって削除されます。Kryptronicsに感謝します!(皮肉)perrealのコメントが追加されました。私はこれについて何のポイントも得るべきではありません。すみません、みんなの時間を無駄にしました!

于 2012-07-27T21:03:33.633 に答える
0

これはどう:

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