12

私は、自分の"Hello, World!"プログラムの適切な/適切な/安全な Perl コードに使用するように指示された次の規則を使用しようとしています:

use strict;
use warnings;

メインの Windows 7 OS で (Strawberry) Perl 5.12 を使用して、次の「Hello World」プログラムを作成し、正常に実行しました。

!#/usr/bin/perl
use strict;
use warnings;

print "Hello, World!\n";

返ってきたのは、案の定、 でした"Hello, World!"

非常に奇妙に感じたのは、Perl 5.14 を使用して、仮想化された Linux Mint 14 OS のターミナルで同じプログラムを実行すると、次のエラーが発生したことです。

"use" not allowed in expression at /PATH/hello_world.pl line 2, at end of line
syntax error at /PATH/hello_world.pl line 2, near "use strict"
BEGIN not safe after errors--compilation aborted at /PATH/hello_world.pl line 3.

その後、または行のない他の「Hello World」プログラムを作成しました。また、いくつuse strict;かのチュートリアルで見た、警告がオンになることを示している .use warnings;-w

私の代替バージョンは両方とも、期待した結果を生成したという点で適切に機能しました。

Hello, World!

useバージョン 5.14 以降の Perl プログラムでステートメントが必要なのか、それとも-w最初の行の最後にを書いても問題ないのか、私には確信が持てません。

Windows であれ Linux であれ、Perl 5.12 であれ 5.14 であれ、それ以外であれ、すべての Perl プログラムで、いわば一貫したヘッダーを使用できると思います。

4

2 に答える 2

17

画像は、すべてのスクリプトが で始まることを示しています!#/usr/bin/perl。これは間違っています。これは有効な she-bang 行ではありません。否定!の後にコメントが続くものとして読み取られ#ます。解析が続行され、script1.plでperl が実行され! print "Hello world.\n";ます。これは... あまり役に立ちませんが有効な perlHello worldの結果を出力して無効にします。print

script2.plで、 perl はこれ! use strict;をコンパイル時のエラーと見なし、そのため perl は失敗し、行のエラーを報告しますuse strict;

したがって、正しい she-bang ラインを使用すると、3 つのスクリプトはすべて設計どおりに機能します。

編集 (テスト スクリプトを追加):

script1.pl

!#/usr/bin/perl

print "Hello world.\n" ;

呼び出すperl script1.pl

Hello world.

script2.pl

!#/usr/bin/perl

use strict;
use warnings ;

print "Hello world.\n" ;

呼び出すperl script2.pl

"use" not allowed in expression at script2.pl line 3, at end of line
syntax error at script2.pl line 3, near "use strict "
BEGIN not safe after errors--compilation aborted at script2.pl line 4.

正しい構文script3.plの使用

#!/usr/bin/perl

use strict ;
use warnings ;

print "Hello world.\n" ;

呼び出すperl script3.pl

Hello world.
于 2013-01-14T08:51:04.653 に答える
9

あなたは次のようなことをしました

use warnings
use strict;

それ以外の

use warnings;
use strict;

実際、それは行末の問題かもしれないと思います。CR LF またはその逆が必要な場所に LF があります。これにより、Perl がコードがシバン行の途中から始まると考えるようになるのを見てきました (例: perl use strict;)


他の場所で述べたように、投稿したコードと使用したコードは異なります。実際に使った

!use strict;

シバンラインが悪いためです。

!#/u...         # Negation followed by a comment

する必要があります

#!/u...         # Shebang
于 2013-01-13T07:16:27.800 に答える