2011-12-28 8 views
2

こんにちは私はperlで次のコードを持っています。私は言語に非常に新しいです:基本的なperl:これらのループエラーを取得する

#!/usr/bin/perl 

use strict; 
use warnings; 

my $date = $ARGV[0]; 

my $symbols = ('A', 'B', 'C'); 


foreach $symbol (%symbols) 
{ 
    my $print = "$symbol"; 
    print "$print"; 

} 

は行き方:

Uselsss use of a constant in void context at (line of %symbols) 
and 
Global symbol "$symbol requires explicit package name at ..." 
and 
Global symbol "%symbols" require explicit package. name at ..." 
+0

'my $ print =" $ symbol "; print "$ print"; 'は' print $ symbol;のように書かれています。 –

+2

あなたはperlの柔軟性を利用して 'print for @ symbols'を使うことができます。 ['print'](http://perldoc.perl.org/functions/print.html)と[' for'( 'foreach')]のドキュメントを読んでください(http://perldoc.perl.org/perlsyn。 html#Foreach-Loops)を使って、その動作を確認します。 – TLP

答えて

7

アレイが必要とされているすべてであるときは、ハッシュを使用しています。

#!/usr/bin/perl 


    use strict; 
    use warnings; 

    my $date = $ARGV[0]; 

    my @symbols = ('A', 'B', 'C'); 


    foreach my $symbol (@symbols) 
    { 
     print $symbol; 

    } 
3

あなたは$symbolsの代わり@symbolsを宣言しているので、スカラーコンテキストであることを置くと「C」にそれを設定しています。次に、作成したことのない同じ名前のハッシュをループしようとします。 $a(スカラー)、@a(配列)、%a(ハッシュ)がすべて異なることを忘れないでください。

これは、あなたが何を望むかである:本当に速い

my @symbols = qw/ A B C /; ## the same as ('A', 'B', 'C') 
foreach my $symbol (@symbols) { 
    print $symbol; 
} 

my @symbols = qw/ A B C /; ## new array with three values 
my $symbols = qw/ A B C /; ## new scalar that is the last element of the "A B C" list ($symbols = 'C') 
my %symbols = (
    A => 1, 
    B => 2, 
    C => 3, 
); ## a hash with three key/value pairs 
+1

"3に設定する"?いいえ。 「A B C」配列のサイズである新しいスカラー?いいえ。元のコードの$記号は "3"の値ではなく "C"の値を取得します。リストは配列ではありません... – tadmc

+0

スカラーコンテキストの 'qw /.../'は、リストの長さではなく、リストの最後の要素を返します。 –

+0

ありがとう!私は何かを学び、私の答えを固定しました。 – gpojd

2

あなたのforeachのは、%symbolsと呼ばれる実在しないハッシュに各シンボルではなく、あなたの配列@symbolsを探しています。それは配列なので

foreach $symbol (@symbols) 
{ 
    my $print = "$symbol"; 
    print "$print"; 
} 
+1

うわー。洪水について話す!チームに行こう! –

6

1)あなたの$symbolsは、@symbolsでなければなりません。後でforeachに、%symbols@symbolsである必要があります。

2)$symbolは宣言されていません。代わりにforeach my $symbol...と言ってください。

関連する問題