perl linenum script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting perl linenum script
# 1  
Old 05-30-2010
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

Code:
SYNTAX ($LINEEQUALITY OPERATOR<MY_FILE>){

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

here is my entire script

Code:
#!/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;

# 2  
Old 05-30-2010
Why so much complication ?
$. gives you the current line number.
printf allows you to format it as you wish.

Code:
$ 
$ 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
# 3  
Old 05-30-2010
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?

Code:
#!/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;


Last edited by livewire06; 05-30-2010 at 03:23 PM..
# 4  
Old 05-30-2010
Quote:
Originally Posted by livewire06
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?
...
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 -

Code:
$ 
$ 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 -

Code:
$ 
$ # 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
# 5  
Old 05-30-2010
perhaps you should try:
Code:
while (my $LINE=<MY_FILE>){
   # Adds leading zeros for numbers 1 digit long

# 6  
Old 05-30-2010
Quote:
Originally Posted by livewire06
Code:
#!/usr/bin/perl -w
# Open function used with  filehandle and input file.
open(MY_FILE, "$ARGV[0]") or die

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

PERL: In a perl-scripttTrying to execute another perl-script that SETS SOME VARIABLES !

I have reviewed many examples on-line about running another process (either PERL or shell command or a program), but do not find any usefull for my needs way. (Reviewed and not useful the system(), 'back ticks', exec() and open()) I would like to run another PERL-script from first one, not... (1 Reply)
Discussion started by: alex_5161
1 Replies

2. Shell Programming and Scripting

Excuting perl script from within a perl script with variables.

Not sure what I am doing wrong here, but I can print the list with no issue. Just a blank screen with the 'do'. #!/usr/bin/perl open FILE, "upslist.txt"; while ($line=<FILE>){ if ($line=~/^(.*?),(.*?)$/){ #print "ups:$1 string:$2\n"; do 'check_snmp_mgeups-0.1.pl -H $1 -C $2'; } ... (1 Reply)
Discussion started by: mrlayance
1 Replies

3. Shell Programming and Scripting

Perl : embedding java script with cgi perl script

Hi All, I am aware that html tags can be embedded in cgi script as below.. In the same way is it possible to embed the below javascript in perl cgi script ?? print("<form action="action.htm" method="post" onSubmit="return submitForm(this.Submitbutton)">"); print("<input type = "text"... (1 Reply)
Discussion started by: scriptscript
1 Replies

4. Shell Programming and Scripting

executing perl script from another perl script : NOT WORKING

Hi Folks, I have 2 perl scripts and I need to execute 2nd perl script from the 1st perl script in WINDOWS. In the 1st perl script that I had, I am calling the 2nd script main.pl =========== print "This is my main script\n"; `perl C:\\Users\\sripathg\\Desktop\\scripts\\hi.pl`; ... (3 Replies)
Discussion started by: giridhar276
3 Replies

5. Shell Programming and Scripting

Using sed '${linenum}d' $filename in shell

Hi Experts, Please let me know how to below situation: Looking for: sed "${linenum}d" $filename > $filename _Without_7C Working Command: sed "${linenum}d" A020820122200.tis2webGMNA001_GDS_DIDOut.txt > A020820122200.tis2webGMNA001_GDS_DIDOut.txt_Without_7C appriciate if you can... (7 Replies)
Discussion started by: rajubollas
7 Replies

6. Shell Programming and Scripting

calling a perl script with arguments from a parent perl script

I am trying to run a perl script which needs input arguments from a parent perl script, but doesn't seem to work. Appreciate your help in this regard. From parent.pl $input1=123; $input2=abc; I tried calling it with system("/usr/bin/perl child.pl $input1 $input2"); and `perl... (1 Reply)
Discussion started by: grajp002
1 Replies

7. Shell Programming and Scripting

HELP on Perl array / sorting - trying to convert Korn Shell Script to Perl

Hi all, Not sure if this should be in the programming forum, but I believe it will get more response under the Shell Programming and Scripting FORUM. Am trying to write a customized df script in Perl and need some help with regards to using arrays and file handlers. At the moment am... (3 Replies)
Discussion started by: newbie_01
3 Replies

8. Shell Programming and Scripting

Perl :How to print the o/p of a Perl script on console and redirecting same in log file @ same time.

How can i print the output of a perl script on a unix console and redirect the same in a log file under same directory simultaneously ? Like in Shell script, we use tee, is there anything in Perl or any other option ? (2 Replies)
Discussion started by: butterfly20
2 Replies

9. Shell Programming and Scripting

perl/unix: script in command line works but not in perl

so in unix this command works works and shows me a list of directories find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt but when i try running a perl script to run this command my $query = 'find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt';... (2 Replies)
Discussion started by: kpddong
2 Replies

10. Shell Programming and Scripting

[Perl] Accessing array elements within a sed command in Perl script

I am trying to use a script to replace the header of each file, whose filename are stored within the array $test, using the sed command within a Perl script as follows: $count = 0; while ( $count < $#test ) { `sed -e 's/BIOGRF 321/BIOGRF 332/g' ${test} > 0`; `cat 0 >... (2 Replies)
Discussion started by: userix
2 Replies
Login or Register to Ask a Question