2017-03-17 5 views
1

私はHTTP::Bodyをテストしています、そして警告> {AA}

my $body = HTTP::Body->new($ct, $cl); 
#.. 
use Data::Dumper; 
warn Dumper($body);     #A 
warn ref $body;      #B 
warn Dumper($body->param);   #C 
warn ref $body->param;    #D 
warn Dumper($body->param->{aa});  #E 
warn ref $body->param->{aa};   #F 

OUTPUT> paramは何かが間違っているのREFの$ body- STRINGではありませんか?それをSTRINGにする方法?

答えて

5

something's wrongは、空の文字列または入力がないときにwarn関数が出力するデフォルトのメッセージです。

$ perl -e warn 
Warning: something's wrong at -e line 1. 

$ perl -e 'warn ""' 
Warning: something's wrong at -e line 1. 

$ perl -e '$body={param=>{aa=>"b"}};warn ref($body->{param}{aa})' 
Warning: something's wrong at -e line 1. 

は、私はあなたにもrefは、文字列として、通常のスカラーに何をするかについて混乱していると思います。 refへの入力が参照でない場合、出力は空の文字列です。

print ref(42);     # no output 
print ref(undef);    # no output 
$foo="abc"; print ref($foo); # no output 
warn ref($foo);    # like warn "", so "something's wrong" 
+0

これとは対照的に、 Perlは強く型付けされていないので、文脈に応じて文字列を数字や数字として文字列として扱います。 'ref'を使うと、それが参照かどうかを除外することができます。 'Scalar :: Util :: looks_like_number'を使うと、数値的な文脈で警告なしに使うことができるかどうかを見ることができます。 'Devel :: Peek'や' B'のようなものを使って内部を見て、現在の瞬間にPerlが数値や文字列として値を格納しているかどうかを知ることができますが、Perlの喜びは内部表現がプログラマがほとんど心配する必要のないもの。 – mob