perl linenum script

im working a a perl script for a class and i need to call a file and print it out with line numbers.

i need help with this line with what to put in the capitalized words

SYNTAX ($LINEEQUALITY OPERATOR<MY_FILE>){

also should i replace MY_FILE with a different syntax or will that work?

here is my entire script

#!/usr/bin/perl -w
unless (scalar(@ARGV) == 2){
   print "error: incorrect number of arguments",
   "\n",
   "usage: linenum.pl [filename]",
   "\n";
      exit 1;
}

# Open function used with  filehandle and input file.
open(MY_FILE, "$ARGV[1]") or die
   "error: argument must be a file\n",
   "usage: linenum.pl [filename]\n$!\n";

# Check if file is a directory
if (-d "$ARGV[1]"){
   print "error: argument must be a file",
   "\n",
   "usage: linenum.pl [filename]\n";
   exit 1;
}

$COUNTER=1;  # Used for printing line numbers









# Loop and write lines from file
SYNTAX ($LINEEQUALITY OPERATOR<MY_FILE>){
   # Adds leading zeros for numbers 1 digit long
   if ($COUNTER<10){
      print "000";
   }
   # Adds leading zeros for numbers 2 digits long
   if (($COUNTER>9) && ($COUNTER<100)){
      print "00";
   }
   # Adds leading zeros for numbers 3 digits long
   if (($COUNTER>99) && ($COUNTER<1000)){
   print "0";
   }
   # Prints line number and line
   print "$COUNTER: $LINE";
   $COUNTER+=1;
}
exit 1;

Why so much complication ?
$. gives you the current line number.
printf allows you to format it as you wish.

$ 
$ cat f0
This is line number 1
This is line number 2
This is line number 3
This is line number 4
This is line number 5
This is line number 6
This is line number 7
This is line number 8
This is line number 9
This is line number 10
$ 
$ perl -ne 'printf("%04d: %s", $., $_)' f0
0001: This is line number 1
0002: This is line number 2
0003: This is line number 3
0004: This is line number 4
0005: This is line number 5
0006: This is line number 6
0007: This is line number 7
0008: This is line number 8
0009: This is line number 9
0010: This is line number 10
$ 

tyler_durden

ok i got it working this far and error reporting for if its a directory and if theres not enough arguments are working but im still getting an error when it should work such as

./linenum.pl FILENAME

and im getting this error

Name "main::MY_FILE" used only once: possible typo at ./linenum.pl line 34.
Use of uninitialized value in string at ./linenum.pl line 11.
Undefined subroutine &main::Open called at ./linenum.pl line 11.

any advice?

#!/usr/bin/perl -w
unless (scalar(@ARGV) == 1){
   print "error: incorrect number of arguments",
   "\n",
   "usage: linenum.pl [filename]",
   "\n";
      exit 1;
}

# Open function used with  filehandle and input file.
Open(MY_FILE, "$ARGV[0]") or die
   "error: argument must be a file\n",
   "usage: linenum.pl [filename]\n$!\n";

# Check if file is a directory
if (-d "$ARGV[0]"){
   print "error: argument must be a file",
   "\n",
   "usage: linenum.pl [filename]\n";
   exit 1;
}

$COUNTER=1;  # Used for printing line numbers









# Loop and write lines from file
while ($LINE=<MY_FILE>){
   # Adds leading zeros for numbers 1 digit long
   if ($COUNTER<10){
      print "000";
   }
   # Adds leading zeros for numbers 2 digits long
   if (($COUNTER>9) && ($COUNTER<100)){
      print "00";
   }
   # Adds leading zeros for numbers 3 digits long
   if (($COUNTER>99) && ($COUNTER<1000)){
   print "0";
   }
   # Prints line number and line
   print "$COUNTER: $LINE";
   $COUNTER+=1;
}
exit 0;

Those are warnings (as opposed to errors), and are shown to you because you set the "-w" switch in the first line.

The first and second one should be pretty obvious. As for the third warning, note that the function is "open" and not "Open" - function names are case-sensitive in Perl, unlike say, Oracle.

About your previous question - no you cannot use the Perl one-liner inside your Perl script. Well, technically you *can*, but that's like wearing a hat on top of a hat - possible, but stupid and clumsy.

Here's one way to do it with Perl -

$ 
$ cat f0.pl
#!/usr/bin/perl -w
unless ( $#ARGV == 0 ) {
    print "error: incorrect number of arguments\nusage: linenum.pl [filename]\n";
    exit 1;
}
# Check if file is a directory
if ( -d "$ARGV[0]" ) {
    print "error: argument must be a file\nusage: linenum.pl [filename]\n";
    exit 2;
}
# Open function used with  filehandle and input file.
open (MY_FILE, "$ARGV[0]") or die "Can't open $ARGV[0]: $!";
# Loop and write lines from file
while (<MY_FILE>) {
  # Prints line number and line
  printf("%04d: %s", $., $_);
}
close (MY_FILE) or die "Can't close $ARGV[0]: $!";
$ 
$ 

Test run -

$ 
$ # no arguments
$ perl f0.pl
error: incorrect number of arguments
usage: linenum.pl [filename]
$ echo $?
1
$ 
$ # more than one argument
$ perl f0.pl f0 f1 f2
error: incorrect number of arguments
usage: linenum.pl [filename]
$ echo $? 
1
$ 
$ # a directory as an argument
$ perl f0.pl mydir
error: argument must be a file
usage: linenum.pl [filename]
$ echo $? 
2
$ 
$ # an unreadable file as an argument
$ perl f0.pl f1
Can't open f1: Permission denied at f0.pl line 12.
$ echo $?
13
$ 
$ # successful run
$ perl f0.pl f0
0001: This is line number 1
0002: This is line number 2
0003: This is line number 3
0004: This is line number 4
0005: This is line number 5
0006: This is line number 6
0007: This is line number 7
0008: This is line number 8
0009: This is line number 9
0010: This is line number 10
$ 
$ 

tyler_durden

perhaps you should try:

while (my $LINE=<MY_FILE>){
   # Adds leading zeros for numbers 1 digit long