Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re: Filehandles vs Uninitialized Values in pattern match

by naikonta (Curate)
on Nov 23, 2007 at 16:35 UTC ( #652607=note: print w/replies, xml ) Need Help??

in reply to Filehandles vs Uninitialized Values in pattern match

The two subroutines in the code below achieve the same thing in different way. As others have pointed out, the mode +< (or O_RDWR with Fcntl module) is the one you need instead of +>> (the latter is still possible, just harder) for the first sub. The second sub uses Tie::File module that makes file operation is as simple as array operation.

The code (file locking is omitted intentionally):

#!/usr/bin/perl use strict; use warnings; my($rdwr_file, $tie_file) = @ARGV; with_rdwr(); with_tiefile(); sub with_rdwr { open DAT, "+<$rdwr_file" or die "can't open $rdwr_file: $!\n"; my $last = (<DAT>)[-1]; if ($last =~ /(\d+)/) { my $new = $1 + 1; seek DAT, 0, 2 or die "Can't seek in $rdwr_file: $!\n"; print DAT $new, "\n"; print "new value for $rdwr_file: $new\n"; } close DAT; } sub with_tiefile { use Tie::File; my @lines; tie @lines, 'Tie::File', $tie_file or die "can't tie $tie_file: $! +\n"; my $last = $lines[-1]; if ($last =~ /(\d+)/) { # sure, testing on $lines[-1] saves a line my $new = $1 + 1; push @lines, $new; print "new value for $tie_file: $new\n"; } untie @lines; }

The run:

$ echo 0 > rdwr $ echo 0 > tie $ cat rdwr 0 $ cat tie 0 $ perl rdwr tie new value for rdwr: 1 new value for tie: 1 $ cat rdwr 0 1 $ cat tie 0 1 ... and some executions later.. $ cat rdwr 0 1 2 3 4 5 $ cat tie 0 1 2 3 4 5

Open source softwares? Share and enjoy. Make profit from them if you can. Yet, share and enjoy!

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://652607]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2023-03-24 15:18 GMT
Find Nodes?
    Voting Booth?
    Which type of climate do you prefer to live in?

    Results (61 votes). Check out past polls.