1

Perl で質問があります: 与えられた入力から一連の姓と電話番号を読み取ります。名前と番号はコンマで区切る必要があります。次に、姓に従ってアルファベット順に名前と番号を印刷します。ハッシュを使用します。

#!usr/bin/perl
my %series = ('Ashok','4365654435' 'Ramnath','4356456546' 'Aniketh','4565467577');
while (($key, $value) = each(sort %series))
{
 print $key.",".$value."\n";
}

出力が得られません。どこが間違っていますか?助けてください。前もって感謝します

#!usr/bin/perl
my %series = ('Ashok','4365654435' 'Ramnath','4356456546' 'Aniketh','4565467577');
print $_.",".$series{$_}."\n" for sort keys %series;

上記の 2 つのプログラムのいずれかを実行すると、次のような出力が得られます。

String found where operator expected at line 2, near "'4365654435' 'Ramnath'" (Missing operator before  'Ramnath'?)
String found where operator expected at line 2, near "'4356456546' 'Aniketh'" (Missing operator before  'Aniketh'?)
syntax error at line 2, near "'4365654435' 'Ramnath'"
Execution aborted due to compilation errors

しかし、質問によると、入力を次のように保存できないと思いますmy %series = ('Ashok','4365654435','Ramnath','4356456546','Aniketh','4565467577');

4

3 に答える 3

4

eachハッシュでのみ動作します。そのように使用することはできませんsort。ハッシュではなくリストを並べ替えます。

ループは次のようになります。

foreach my $key (sort keys %series) {
  print $key.",".$series{$key}."\n";
}

または速記:

print $_.",".$series{$_}."\n" for sort keys %series;
于 2012-10-20T07:26:29.517 に答える
2

ハッシュ宣言には次のものがあります。

my %series = ('Ashok','4365654435' 'Ramnath','4356456546' 'Aniketh','4565467577');

これにより、警告が生成されます。

ハッシュは、単にスカラーの偶数リストです。したがって、各ペアの間にコンマを入れる必要があります。

my %series = ('Ashok','4365654435', 'Ramnath','4356456546', 'Aniketh','4565467577');
             #                    ^---                    ^---

ペアを視覚的に区別したい場合は、=>演算子を使用できます。これはコンマと同じように動作します。さらに、左側が正当なベアワードである場合、引用符で囲まれた文字列と見なされます。したがって、次のいずれかを書くことができます。

# it is just a comma after all, with autoquoting
my %series = (Ashok => 4365654435 => Ramnath => 4356456546 => Aniketh => 4565467577);

# using it as a visual "pair" constructor
my %series = ('Ashok'=>'4365654435', 'Ramnath'=>'4356456546', 'Aniketh'=>'4565467577');

# as above, but using autoquoting. Numbers don't have to be quoted.
my %series = (
   Ashok   => 4365654435,
   Ramnath => 4356456546,
   Aniketh => 4565467577,
);

この最後の解決策が最適です。最後のコンマは省略可能ですが、別のエントリを簡単に追加できるため、良いスタイルだと思います。左側のベアワードが有効な変数名になる場合はいつでも、オートクォートを使用できます。たとえばa_bc => 1、有効ですが有効でa bc => 1はなく (変数名に空白は使用できません)、+/- => 1使用できません (予約文字)。ただし、ソース コードが UTF-8 でエンコードされていて、スクリプトでエンコードされている場合Ünıçøðé => 1許可use uft8されます。

于 2012-10-20T10:16:37.557 に答える
1

amonand Mat が言ったことに加えて、コード内の他の問題に注目したいと思います。

  • あなたのシバンは間違っているはずです#!/usr/bin/perl-最初に注意してください/
  • use strict;コードにandがありませんuse warnings;- これは厳密には間違いではありませんが、これは問題だと思います。これらの 2 つのコマンドは、後で多くの問題からあなたを救います。

PS:名前と数字の間だけでなく、数字と名前の間にもコンマを使用する必要があります-そうしないとコンパイルエラーが発生するため、そうする必要があります

于 2012-10-20T16:29:53.350 に答える