2

win32でActiveStatePerl5.10.1を実行します。

このコードはどうですか?

die(defined($r->unparsed_uri =~ '/(logout.pl)?$'));

...で死ぬが1、同じ行を変更してこれを言う:

die($r->unparsed_uri =~ '/(logout.pl)?$');

...で死ぬUse of uninitialized value in die

definedまだどうuninitializedですか?初期化されていないということは未定義を意味すると思いました。

4

2 に答える 2

8

最初のケースでは、マッチング操作はスカラーコンテキストで実行されます。2番目のケースでは、次のように記述したかのように、配列コンテキストで実行されます。

my @groups = $r->unparsed_uri =~ '/(logout.pl)?$';
die @groups;

$r->unparsed_uriパターンに一致するが、一致した文字列が「/」で終わっているために定義されていない場合$1、@groupsは単一の要素を含む長さ1の配列になりますundef

すべてをまとめると、次のようになります。

die(undef);
于 2010-02-02T21:13:41.560 に答える
2

警告を有効にしましたか?

与えられた

#!/usr/bin/perl -l

use strict; use warnings;

my $uri;

die(defined($uri =~ '/(logout.pl)?$'));

私は得る

E:\t.plの7行目のパターンマッチ(m //)での初期化されていない値$uriの使用。
E:\t.plの7行目で1。

何が起こっているのかを説明しています。

$uriは定義されていないため、で使用すると警告が表示されm//ます。が定義されていないため$uri、一致の結果はfalseですが、定義されています。したがって、definedtrueを返し、をdie出力します1

于 2010-02-02T21:20:45.557 に答える