Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Re: File modification

by TedPride (Priest)
on Jul 07, 2006 at 15:34 UTC ( #559808=note: print w/replies, xml ) Need Help??

in reply to File modification

You don't need a 3-argument open when the open doesn't have any user input in it. And obfuscating the code doens't really help either, even if the result is shorter.
use strict; use warnings; my ($argact, $handle, $num); ($argact) = $ARGV[0] =~ /(\d+)/; exit if !$argact; open $handle, 'one.txt'; $_ = join '', <$handle>; close $handle; ($num) = m/(\d+)$/; if ($num != $argact) { s/(\d+)$/$argact/; open $handle, '>one.txt'; print $handle $_; close $handle; }

Replies are listed 'Best First'.
Re^2: File modification
by liverpole (Monsignor) on Jul 07, 2006 at 18:13 UTC
    It's true you don't need the 3-argument open, but I believe it's considered good programming practice, if for no other reason than getting users in the habit of using safer code.

    Your example has other issues, though.  While it's true you're exiting if the argument isn't numeric, it might be confusing to the user not to get a syntax message.  And if no argument is given, instead of a more friendly syntax message one gets:

    Use of uninitialized value in pattern match (m//) at ./mytest line 8.

    Additionally, because of the '$' in the regex, there's the problem of input which doesn't contain digits at the very end, which will fail even if there's an extra newline in the input:

    Use of uninitialized value in pattern match (m//) at ./mytest line 15.


Log In?

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

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (4)
As of 2021-10-17 02:46 GMT
Find Nodes?
    Voting Booth?
    My first memorable Perl project was:

    Results (71 votes). Check out past polls.