2011-12-29 13 views
0

私はインターネットチュートリアルの助けを借りて自分自身を教えています。そして、ほとんどの場合、それは本当にうまくいっていて、すべてが円滑に実行されます。しかし、私は何らかのコメントをすることはできません。あるいは、プログラムが正しく動作しません。たとえば、次のコード:Perl5のコメントはプログラムをクラッシュさせますか?

#eee 
print "Estimation of Pi"; 

が実行されますが、それが意味していますちょうどこの

print "Estimation of Pi"; 

実行され、印刷物何ながら、何も印刷されません。

私は間違っていますか?私はこれを全く理解していません。

また、サイドノートでは、#!/ usr/bin/perlには何が必要ですか?私のプログラムはそれがなくてもうまく動作しているようです(そして、コメントであり、プログラムはそれと共に動作しません)。

+2

'perl -v' returns? –

+0

どのようにPerlスクリプトを実行していますか?あなたはどんな環境ですか? – sarnold

+1

あなたは ''# ''とタイプしているキャラクターにどんな価値がありますか?たとえば、 '' od -c file.pl' 'を実行すると、 ''# ''が表示されますか?理想的には、文字単位の16進数ダンプを行う場合、 ''# '' 0x23のコードは?私は他に何ができるかは分かりませんが、それはあなたが見ている奇妙な行動です。 '#!/ usr/bin/perl'(シバン)表記は、(' perl file.pl'の代わりに) 'file.pl'とタイプすれば、正しいプログラム('/usr/bin/perl')は実行される。 –

答えて

3

:それとも、明示的perlでそれを実行することができます。 LFまたはCRLFの代わりにCRを使用している可能性があります。

>perl -e"binmode STDOUT; print qq{#eee\rprint qq{foo\\n}}" | perl 

>perl -e"binmode STDOUT; print qq{#eee\nprint qq{foo\\n}}" | perl 
foo 

>perl -e"binmode STDOUT; print qq{#eee\r\nprint qq{foo\\n}}" | perl 
foo 

は、以下のコマンドを使用して悪いことでバイナリエディタを使用してファイルを調べます

perl -0777nE"BEGIN { binmode STDIN } say join ' ', unpack '(A2)*', unpack 'H*', $_" < file 

#!がUNIXの概念です。 Windowsはこれを使用しませんが、Perlはその行のコマンドラインオプションを探します。たとえば、次のように警告します。

#!perl -w 
print undef; 
+0

ありがとう、これはそれを解決しました! – morgoe

+0

他の誰かが同様の問題を抱えている場合には、メモ帳++を使用して.plファイルを編集していました。私はView - > Show Symbols - > Show End Of Lineを使って、最後にCRを表示しました。次に、編集 - > EOL形式 - > Windowsを使って変更しました。 – morgoe

1

それはかなり変です。あなたはどのようにそのプログラムを実行していますか?そのプログラムをWindowsスタイルの改行が必要なシステムで実行しているが、問題の原因となるUNIXスタイルの改行を生成するテキストエディタで作成している場合。テキストエディタが、ウィンドウ上にある場合は、ウィンドウスタイルの改行を使用するように設定されていることを確認してください。

#!/usr/bin/perlはコメントではありません。それはシバン行と呼ばれ、UNIXシステムでは、テキストファイル(つまり、chmod +x filename.pl)を実行してperl filename.plではなく./filename.plで実行すると、システムは最初の行でそれを探し、見つかった場合は、そのファイルにあるユーティリティ(この場合は/usr/bin/perl)にファイル全体を渡します。 UNIXシステムでのみ有効で、スクリプトを実行可能にしたい場合にのみ便利です。

もう1つのtip-perlは、printに渡されたものに出力バッファを使用しています。つまり、printという改行で終わらないもの(\n)は、バッファをフラッシュするか(通常はperlで必要なものではない)、改行を含むものを印刷するか、プログラムを終了するまで、バッファに保持されます。プログラムに$| = 1;を追加することでこの機能をオーバーライドすることができますが、メッセージを改行で終了するのが最善です。そうしないと、画面が乱雑になります。

+0

申し訳ありませんが、OPにこの情報を入れておく必要があります。私はActivePerl 64bitでWindows 64bitを使用しています。私は、スクリプトが保存されているディレクトリに移動し、単に 'test.pl'を使ってそれらを実行するコマンドラインに行きます。私は秒でさらに情報を追加します。 – morgoe

+6

[シバン](http://en.wikipedia.org/wiki/Shebang_%28Unix%29)です。 CrunchbangはLinuxディストリビューションです。 – ikegami

+0

hh。 Crunchbangはロゴとして '#!'を使用していますが、私はいつもその名前が付けられていると仮定していました。 – Dan

1

スクリプトをPerlスクリプトではなくシェルスクリプトとして実行していて、$PATHprintコマンドがある可能性があります。これはあなたがUnixのような環境にいることを前提としています。しかし、この回答は他の人には役に立つかもしれません。

printechoに変更するとどうなりますか? echoは有効なPerlコマンドではないので、それでも動作すれば私の推測はおそらく正しいでしょう。

スクリプトの最初の行は

#!/usr/bin/perl 

この「シェバングは」名前でそれを実行したときにスクリプトを実行するためにどのようにシステムに指示しなければなりません。私はあなたのファイルがあなたはそれがないと思う何が含まれていない疑いがある

perl ./script_name 
関連する問題