Filehandle open () и переменная split - PullRequest
0 голосов
/ 02 июля 2011

Я новичок в Perl.Что я не понимаю, так это:

Чтобы написать скрипт, который может:

  • Вывести строки файла $ source с разделителем запятыми.
  • Выведите отформатированные строки в выходной файл.
  • Разрешите указывать этот выходной файл в командной строке.

Код:

my ( $source, $outputSource ) = @ARGV;
open( INPUT, $source ) or die "Unable to open file $source :$!";

Вопрос: IНе понимаю, как можно указать в командной строке, после начала писать код текст выходного файла.

Ответы [ 2 ]

2 голосов
/ 02 июля 2011

Вместо этого я бы использовал оператор перенаправления в оболочке, например:

script.pl input.txt > output.txt

Тогда это простой случай:

use strict;
use warnings;

while (<ARGV>) {
    s/\n/,/;
    print;
}

Тогда вы можете даже объединитьнесколько файлов с script.pl input1.txt input2.txt ... > output_all.txt.Или просто сделайте один файл за раз с одним аргументом.

0 голосов
/ 02 июля 2011

Если я правильно понял ваш вопрос, надеюсь, этот пример поможет.

Программа:

use warnings;
use strict;

## Check input and output file as arguments in command line.
die "Usage: perl $0 input-file output-file\n" unless @ARGV == 2;
my ( $source, $output_source ) = @ARGV;

## Open both files, one for reading and other for writing.
open my $input, "<", $source or 
        die "Unable to open file $source : $!\n";
open my $output, ">", $output_source or 
        die "Unable to open file $output_source : $!\n";

## Read all file line by line, substitute the end of line with a ',' and print
## to output file.
while ( my $line = <$input> ) {
        $line =~ tr/\n/,/;
        printf $output "%s", $line;
}

close $input;
close $output;

Выполнение:

$ perl script.pl infile outfile
...