Bash HereドキュメントのPerlスクリプト(変数出力なし)?

Bash HereドキュメントのPerlスクリプト(変数出力なし)?

なぜ次のPerlコードが必要なのですか?

mkdir("foo");
print "foo: $!\n";
mkdir("foo");
print "foo: $!\n";

以下を出力します(ないディレクトリからfoo

perl ./asdf.pl 
foo: 
foo: File exists

ただし、foo以下を削除してください。

$ perl <<EOF 
  mkdir("foo");
  print "foo: $!\n";
  mkdir("foo");
  print "foo: $!\n";
EOF

エラーを飲み込んで出力し、

foo: 
foo: 

ベストアンサー1

という言葉を引用したいですEOF。文書(man bash)から

の一部が引用さwordれている場合、区切り文字は引用符を削除した結果wordであり、ドキュメントの行はここでは拡張されません。

だからそれは次のようになります。

$ perl <<'EOF'

EOF

EOF引用しない場合は、$!Perlに送信される前にシェルから挿入されます。

$ cat <<EOF 
  mkdir("foo");
  print "foo: $!\n";
  mkdir("foo");
  print "foo: $!\n";
EOF
  mkdir("foo");
  print "foo: \n";
  mkdir("foo");
  print "foo: \n";

おすすめ記事