Вы можете использовать Tie :: File (в ядре Perl начиная с Perl 5.8), чтобы изменить файл на месте:
#!/usr/bin/perl
use strict;
use warnings;
use Tie::File;
my $file = shift;
tie my @lines, "Tie::File", $file
or die "could not open $file: $!\n";
for my $line (@lines) {
$line .= join ",", '', get_data();
}
sub get_data {
my $data = <DATA>;
chomp $data;
return split /-/, $data
}
__DATA__
1-2-3-4
5-6-7-8
Вы также можете использовать редактирование на месте с трюком @ARGV / <>, установив $ ^ I:
#!/usr/bin/perl
use strict;
use warnings;
$^I = ".bak";
while (my $line = <>) {
chomp $line;
$line .= join ",", '', get_data();
print "$line\n";
}
sub get_data {
my $data = <DATA>;
chomp $data;
return split /-/, $data
}
__DATA__
1-2-3-4
5-6-7-8