Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
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

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://599354]
help
Chatterbox?
[ambrus]: Corion: Maybe I'm not explaining the situation clearly enough, maybe I'm just wrong and he's right and we can compute that data,
[ambrus]: but hopefully he just wants to think it through himself his way and understand why it's impossible rather than blindly accept my argument.
choroba quickly peeps in from a café
[1nickt]: Good morning Monks of the world!
[Corion]: ambrus: Yeah, hopefully it's that
[1nickt]: I am stumped, maybe someone brainy can clear my mind?
[1nickt]: This code does what I expect on the CLI: perl -wE 'sub x { 0 and 1 } say x()'
[1nickt]: (prints "0")

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (10)
As of 2017-12-12 13:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    What programming language do you hate the most?




















    Results (332 votes). Check out past polls.

    Notices?