Johann Snyman wrote: > > Hello there, Hello,
> I am a newby trying to learn pearl. I wrote my first little script, > and I would love to se where I could have done things better (in a > more proffesional way). > > Feedback would be appreciated! > > #!/usr/bin/perl > use strict; > use warnings; Very good start. > our @scores = `cat /home/johann/smail/Spam/* | grep ^Subject:` ; Using backticks is fine in some cases and this is probably one of them. However you can use perl's built-in grep instead of the external grep command. our @scores = grep /^Subject:/, `cat /home/johann/smail/Spam/*`; > # string looks like this: Subject: 10.20 Re: Hallo > > our @vals; > our $counter = 0; > > for (@scores) { > $_ =~ /([0-9][0-9]\.[0-9][0-9])/; > $vals[$counter] = $1; You should always verify that the match was successful before using the numerical variables. Also the usual way to add elements to an array is with push(). push @vals, $1 if /(\d\d\.\d\d)/; > $counter++; > } However, you can avoid using external commands through backticks and populate @vals a little more directly: @ARGV = glob '/home/johann/smail/Spam/*'; our @vals = map /^Subject:.*?(\d\d\.\d\d)/, <>; > my $saved = `cat /home/johann/.spamscore` || die $!; > chomp($saved); > push @vals, $saved; > > @scores = sort(@vals); Since you are sorting numbers you should probably do a numerical sort. @scores = sort { $a <=> $b } @vals; > #for (@scores) { > # print $_,"\n"; > # } > > > my $highest = @scores; > $highest -= 1; > > open (FH, ">/home/johann/.spamscore") || die $!; > > print FH $scores[$highest]; > > close(FH); You are reading from the file using `cat` but since you are also writing to the same file it would make more sense to open the file once in read/write mode: use Fcntl qw(:seek); my $scorefile = '/home/johann/.spamscore'; open my $fh, '+<', $scorefile or die "Cannot open $scorefile: $!"; # you may want to lock the file here chomp( my $highest = <$fh> ); # reset the file for writing seek $fh, 0, SEEK_SET or die "Cannot seek $scorefile: $!"; truncate $fh, 0 or die "Cannot truncate $scorefile: $!"; # this is more efficient then sorting $highest < $_ and $highest = $_ for @vals; print $fh $highest; close $fh; __END__ John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]