所以我有這個代碼從命令行獲取輸入和輸出文件,然後將一定的輸出寫入輸出文件(由於隱私問題,此處僅顯示相關部分):Perl:無法將輸出寫入文件
use strict;
use warnings;
use autodie;
# check that two arguments have been passed
die "usage: $0 input output\n" unless @ARGV == 2;
my $infile = shift;
my $outfile = shift;
open my $in, "<", $infile;
open(DATA, $in);
open my $out, ">", $outfile;
my %DEF = (
I => [ qw(P Pl P.P P.Pl Pl.P Pl.Pl P.P.P P.P.Pl P.Pl.P P.Pl.Pl Pl. +P.P Pl.P.Pl Pl.Pl.P Pl.Pl.Pl) ],
II => [ qw(E P.E Pl.E P.P.E P.Pl.E Pl.P.E Pl.Pl.E) ],
III => [ qw(E.P E.Pl P.E.P P.E.Pl Pl.E.P Pl.E.Pl E.P.P E.P.Pl E.Pl.P + E.Pl.Pl) ],
IV => [ qw(E.E P.E.E Pl.E.E E.P.E E.Pl.E E.E.P E.E.Pl E.E.E) ]
);
# Hash table/dictionary for all the groups
my @rank = map @$_, @DEF{qw(I II III IV)};
my %rank = map { $rank[$_ - 1] => $_ } 1 .. @rank;
my @group = map { ($_) x @{ $DEF{$_} } } qw(I II III IV);
my %group = map { $rank[$_ - 1] => $group[$_ - 1] . "_" . $_ } 1 .. @group;
sub rank {
$rank{ $a->[2] } <=> $rank{ $b->[2] }
}
my %T;
sub oh {
map values %$_, @_;
}
sub ab {
my ($b, $a) = @_;
[$b->[0], $a->[1], qq($a->[2].$b->[2]), qq($b->[3]<-$a->[3])];
}
sub xtend {
my $a = shift;
map { ab $_, $a } oh @{ $T{ $a->[0] } }{@_};
}
sub ins {
$T{ $_[3] //= $_[1] }{ $_[2] }{ $_[0] } = \@_;
}
ins split /,\s*/ for <DATA>;
#ins split /,\s*/ for $filename;
ins @$_ for map { xtend $_, qw(P E Pl) } (oh oh oh \%T);
ins @$_ for map { xtend $_, qw(P E Pl) } (oh oh oh \%T);
for (sort { rank } grep { $_->[1] eq 'Q' } (oh oh oh \%T)) {
print $out "%-4s: %20s, %-8s %6s\n",
$_->[0],
qq($_->[0]$_->[3]),
$_->[2],
$group{ $_->[2] };
close $in;
close $out;
}
問題是它沒有寫任何東西到輸出文件。
perl program.pl input_file output_file
由於某些原因,我想以格式讀取輸入文件,以至於無法完成。
請幫
input_file
M19,Q,P,
M31,M19,Pl,
M420,M31,E,
M421,M31,E,
M33,M31,E,
M438,M33,Pl,
M445,M33,E,
M437,M33,E,
M444,M33,E,
M73,M33,E,
M552,M73,Pl,
M553,M73,Pl,
M569,M73,E,
M549,M73,E,
M550,M73,E,
什麼是'開放(DATA,在$);'怎麼辦呢? –
另外,「_I要在format_中的輸入文件中讀取」是什麼意思? –
大概你得到*「打印()關閉文件句柄」*錯誤?如果你可以讓我們獲得這樣的信息,這將是一件好事 – Borodin