Perl変数名にはドットを含めることができないため、$max.nb
は有効な変数名ではありません。あなたは$max_nb
のために解決しますか?あなたはハードコードされたファイル名を取り除くと、オペレーティングシステムのIOリダイレクションはfilenandlesの世話をさせた場合
#!/usr/bin/perl
# Always use these
use strict;
use warnings;
# Lexical filehandle and three-arg open;
open my $fh, '<', ‘NAME.txt’ or die $!;
my $max_nb;
while (<$fh>) {
next unless /^Max\.number/;
# split on colon and optional spaces.
# Only store second field.
(undef, $max_nb) = split /\s*:\s*/;
}
print $max_nb;
あなたのプログラムは非常に簡単になります。
#!/usr/bin/perl
# Always use these
use strict;
use warnings;
my $max_nb;
while (<>) {
next unless /^Max\.number/;
# split on colon and optional spaces.
# Only store second field.
(undef, $max_nb) = split /\s*:\s*/;
}
print $max_nb;
これは、max_nb
と呼ばれるファイルにされたと仮定すると、あなたはこのようにそれを呼び出すことができます。
$ ./max_nb NAME.txt
900
アップデート:コメントで、あなたはすべてのラインをキャプチャすることを示唆しています。それは事をかなり変えます。これで、データをハッシュに格納するのが理にかなっています。
#!/usr/bin/perl
# Always use these
use strict;
use warnings;
use feature 'say';
my %numbers; # hash
while (<>) {
if (my ($key, $val) = /(^\w+)\.number : (\d+)/;
$numbers{$key} = $val;
}
say "$_: $numbers{$_}" for keys %numbers;
これはperlコードではありません。 'use strict;'と 'use warnings;'を追加し、発行されたエラーと警告を修正してください。 – dgw