2

for ループを使用して配列から要素を読み取ろうとしていますが、正しく動作していないようです。プログラムを実行すると、奇妙な "HASH" が出力されるか、何も出力されません。誰でも助けることができますか?

#!/usr/bin/perl
use strict;

my $he;
my @selections = {"Hamburger","Frankfurter","French Fries","Large Coke","Medium Coke","Small Coke","Onion Rings"};
my @prices = {3.49, 2.19, 1.69, 1.79, 1.59, 1.39, 1.19};

for($he= 0; $he<= 6; $he++)
{
      print "@selections[$he]";
      print "@prices[$he]\n";
}
4

1 に答える 1

5

を配置すると、 への参照を{}明示的に要求します。代わりに必要と思われるのは、括弧を使用して.perlHASHARRAY

そう :

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

my @selections = (
    "Hamburger",
    "Frankfurter",
    "French Fries",
    "Large Coke",
    "Medium Coke",
    "Small Coke",
    "Onion Rings"
);
my @prices = (3.49, 2.19, 1.69, 1.79, 1.59, 1.39, 1.19);

for(my $he = 0; $he <= 6; $he++)
{
    print "$selections[$he]=$prices[$he]\n";
}

さらに、配列を作成することはより楽しく、そのように退屈ではありません:

my @selections = qw/foo bar base/;

ただし、値のスペースがない場合にのみ機能します。

ノート

  • いつもご利用いただくことをお勧めしuse warnings;ます
  • 書かない@selections[$he]けど$selections[$he]
  • $heスコープ全体で事前宣言する必要はありません。宣言する場所を確認してください
  • より良いアプローチ (ニーズによって異なります) はHASH、 two の代わりにa を使用することARRAYSです。

このような :

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

my %hash = (
    "Hamburger" => 3.49,
    "Frankfurter" => 2.19,
    "French Fries" => 1.69,
    "Large Coke" => 1.79,
    "Medium Coke" => 1.59,
    "Small Coke" => 1.39,
    "Onion Rings" => 1.19
);

foreach my $key (keys %hash) {
    print $key . "=" . $hash{$key};
}
于 2012-10-23T19:42:44.983 に答える