@ARGV
содержит аргументы программы.
@ARGV == 1
or die("usage\n");
my ($qfn) = @ARGV;
open(my $fh, "<", $qfn)
or die("Can't open \"$qfn\": $!\n");
while (<$fh>) { # Sets $_
chomp; # Remove the line feed from $_.
print("$_\n"); # Re-adds the line feed and prints the line.
}
или
...
while ( my $line = <$fh> ) {
chomp($line); # Remove the line feed from $line.
print("$line\n"); # Re-adds the line feed and prints the line.
}
Дело в том, что Perl имеет специальный дескриптор (ARGV
), который читает из файлов, чьипути находятся в @ARGV
(или из STDIN, если не были предоставлены аргументы).Это дескриптор по умолчанию, используемый <>
(это означает, что <>
- это сокращение от <ARGV>
), поэтому все, что вам нужно, это следующее:
while (<>) {
chomp;
print("$_\n");
}
Технически, все, что вам нужно, этоследующее:
while (<>) {
print;
}
Вышеуказанное эквивалентно следующему:
print while <>; # Also one line at a time.
Вы можете даже использовать следующее:
print <>; # Reads all the lines, then prints them.
Тем не менее, один обычнохочет каким-то образом преобразовать ввод перед его распечаткой, и для этого обычно полезно удалить перевод обучающей строки.
Я назвал переменную qfn для уточненного имени файла, что означает относительный или абсолютныйпуть, который включает имя файла.Это то, что вы действительно принимаете, а не просто имя файла.