Hi
madtoperl,
A number of suggestions, actually...
- You should use "strict" and "warnings".
- You should use the 3-arg form of open.
- You should check for failure conditions, such as open failing, or @ARGV not being set.
- If you use the module FileHandle, your filehandles don't have to be typeglobs.
- It is redundant to do ($_ =~ /.../); instead just do (/.../).
- If you use regex captures, you don't have to split afterwards.
- You're not using $changeflag; get rid of it.
- Finally, you're writing every line to the file, so why not just do a regex substitution and, if it fails, write the line anyway?
- It's considered good form (though not technically necessary in this case) to close your files when you're done with them.
Here's my rewrite:
#!/usr/bin/perl -w
use strict;
use warnings;
use FileHandle;
(my $argact = shift) or die "Syntax: $0 <fileid>\n";
my $input = new FileHandle;
my $newfile = new FileHandle;
open($input, "<", "one.txt") or die "Failed to read 'one.txt' ($!)\n
+";
open($newfile, ">", "output") or die "Failed to write 'output' ($!)\n
+";
while(<$input>){
s/^Authentication\s+number\s+is\s+(\d+)/Authentication number is $
+argact/;
print $newfile "$_";
}
close $input;
close $newfile;
Isn't that a lot cleaner?
s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/