条件演算子を使用すると、その if/else ステートメントの共通コードを除外できます。
while ( <PARAdef> ) {
chomp;
my ($PGkey, $PGval) = split /\s+=\s+/;
print "$PGkey = ",
$PGval eq $hash{$PGkey}[$id] ? $hash{$PGkey}[$id] : $PGval, "\n";
}
または、問題を誤解していて、$hash{$PGkey} が存在する場合は $hash{$PGkey}[$id] を使用し、存在しない場合は $PGval にフォールバックしたい場合は、次のように言うことができます。
while ( <PARAdef> ) {
chomp;
my ($PGkey, $PGval) = split /\s+=\s+/;
print "$PGkey = ",
$PGkey ne "def" and exists $hash{$PGkey} ?
$hash{$PGkey}[$id] : $PGval, "\n";
}
簡単に言うと、古いベアワード スタイルのファイルハンドルを使用しているようです。新しい (10 年前のものを新しいと見なすことができる場合) レキシカル ファイルハンドルは、あらゆる点で優れています。
open my $PARAdef, "<", $filename
or die "could not open $filename: $!";