2011-09-12 12 views
1

学習Perl第6版の第2章の練習2ページ42に固執しています。 問題のコード例を296ページからコピーしました。私はUbuntu 11.04でPerlバージョン5.10.1を使用しています。誰かが助けてくれると分かりませんが、間違いがありますか?以下のコードとエラーメッセージを記載します。「Learning Perl 6th Edition」のこの例はなぜ実行されませんか?

#!/usr/bin/perl -w 
$pi = 3.141592654; 
print "What is the radius? "; 
chomp($radius = <STDIN>); 
$circ = 2 * $pi * $radius; 
print "The circumference of a circle of radius $radius is $circ.\n"; 

私が手にエラーがある:あなたがperlの代わりにあなたのシェルを使用して、Perlスクリプトを実行している

./ex2-2: line 3: =: command not found 
Warning: unknown mime-type for "What is the radius? " -- using "application/octet-stream" 
Error: no such file "What is the radius? " 
./ex2-2: line 5: syntax error near unexpected token `$radius' 
./ex2-2: line 5: `chomp($radius = <STDIN>);' 
+2

これをCGIスクリプトとして実行しようとしているような音ですが、どのように実行しましたか(どのコマンドを入力しましたか)? –

答えて

9

。行番号が1つだけオフになっているという事実に基づいて、問題の原因は、シバン(#!)行の前の空白行であると思われます。 #!は、ファイルの最初の2バイトでなければなりません。この空白行を削除します。

それは問題ではない場合は、おそらくあなたは、あなたが

perl ex2-2 

または

ex2-2  # if "." is in your $PATH 
を使用している必要があるとき

. ex2-2 

または

sh ex2-2 

を使用してスクリプトを実行します

または

./ex2-2 

最後の二つは、スクリプトの実行可能ファイル(chmod u+x ex2-2)を作ることが必要です。

+0

あなたは正しいのですが、私はシバンの前に空きスペースを持っていました。それは今うまく動作し、ありがとう。私は夜にコーディングを止めなければなりません。私が疲れていると私は愚かな間違いをします。 – David

4

実行した内容をコピーして貼り付けると役立ちます。

$ cat x.pl 
#!/usr/bin/perl -w 
$pi = 3.141592654; 
print "What is the radius? "; 
chomp($radius = <STDIN>); 
$circ = 2 * $pi * $radius; 
print "The circumference of a circle of radius $radius is $circ.\n"; 
$ sh x.pl 
x.pl: line 2: =: command not found 
x.pl: line 3: print: command not found 
x.pl: line 4: syntax error near unexpected token `$radius' 
x.pl: line 4: `chomp($radius = <STDIN>);' 
$ 

これは、MacOS Xの10.7.1のBash 3.xのとあった:行番号は、以下の例では異なっていることに注意してください。

私は、あなたのスクリプトがPerlスクリプトではなくシェルスクリプトとして実行されたと自信を持って診断できます。 bashを使用して実行しました。

+1

シバン#の前に空白行が表示されてしまうエラーを助けてくれてありがとう! 。 – David

関連する問題