Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: Defactor this code

by japhy (Canon)
on Feb 10, 2007 at 13:27 UTC ( #599354=note: print w/ replies, xml ) Need Help??


in reply to Defactor this code

First, your $errorstate variable is named the opposite of what it should be. You set it to 1 when the input is formatted properly! Then, the bottom half of your code can be idiomized using some built-in variables in Perl. And are you sure you want to REMOVE the '#' from lines starting with '#port'? You also do some unnecessary work of checking to see if a regex matches before doing a substitution using that regex.

It turns out you can get rid of $errorstate altogether, and just loop until $sshport has a value.

#!/usr/bin/perl use strict; use warnings; my $sshport = 0; until ($sshport) { print "Please enter SSH port number> "; chomp($sshport = <STDIN>); $sshport = 0 unless $sshport =~ /^[1-9]\d{1,9}$/; } { local $^I = ".old"; # the "in-place edit backup extensio +n" variable local @ARGV = ("sshd_config"); # the files to edit in-place while (<>) { s/^(#?)port .*/$1Port $sshport/i; # this KEEPS the '#' character, # which I think is the correct behavior } }
See perlvar for information about $^I.

Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart


Comment on Re: Defactor this code
Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (10)
As of 2015-07-07 07:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (87 votes), past polls