私は関数を呼び出すPerlプログラムを持っています。この場合はref
です。結果を確認します。具体的には、変数がハッシュリファレンスであることをテストしています。その場合、ref
は'HASH'
を返します。私はそれをテストし、それは働いた。関数が返す値を連結して出力できないのはなぜですか?
その後、同じ呼び出しの結果を表示するprint
を追加してログに記録することにしましたが、正しく機能しませんでした。ここでは縮小版である:
use strict;
use warnings;
my $book_ref = {};
$book_ref->{'title'} = 'The Lord of the Rings';
if (ref $book_ref eq 'HASH') {
print "ref \$book_ref is a " . ref $book_ref . "\n";
}
print "Program is over\n";
が驚いたことに、これは出力した:
ref $book_ref is a Program is over
そしてstrict
を使用してもかかわらず、そしてwarnings
どちらもエラーや警告がありました。
ref
への呼び出しは全く同じです(コピー&ペースト)が、if
の条件の中で正しく動作しますが、改行文字がはっきりとスキップされるため、何も表示されず、実際には中断されているようです。なぜ行動は変わるのですか?
また、[print LIST](https://perldoc.perl.org/functions/print.html)による「印刷」値が「、(コード)」、「\ n」であるカンマを使用してください。 – zdim
または、 printf' – toolic
式補間を使う: 'print" ref \ $ book_refは$ {\ ref $ book_ref}です\ n " – mwp