So, let’s say I am writing a Perl program:
./program.perl 10000 < file
I want it to read the 10000th line of “file” only. How could I do it using input redirection in this form? It seems that I keep getting something along the lines of 10000 is not a file.
I thought this would work:
#!/usr/bin/perl -w
$line_num = 0;
while ( defined ($line = <>) && $line_num < $ARGV[0]) {
++$line_no;
if ($line_no == $ARGV[0]) {
print "$line\n";
exit 0;
}
}
But it failed miserably.
If there are command-line arguments, then
<>opens the so-named files and reads from them, and if not, then it takes from standard-input. (See “I/O Operators” in the perlop man-page.)If, as in your case, you want to read from standard-input whether or not there are command-line arguments, then you need to use
<STDIN>instead: