http://qs321.pair.com?node_id=186912

dwatson06 has asked for the wisdom of the Perl Monks concerning the following question:

I am trying to search data from a file for a numeric value. If there is not one, default to four zeros.
I am trying this...
if(substr($AResp, 8, 4) =~ eq /\d\d\d\d/) {
my $shopID = substr($AResp, 8, 4);
}else{
my $shopID = "0000";
}
What am I doing wrong?
Thanks,
Daniel

Replies are listed 'Best First'.
Re: checking substring for numbers
by bedk (Pilgrim) on Aug 01, 2002 at 20:10 UTC
    You've got a scoping problem, I think. 'my' gives you a variable local to a block, so as soon as you hit the right curly brace your $shopID goes away.

    Brian
Re: checking substring for numbers
by BrowserUk (Patriarch) on Aug 01, 2002 at 22:11 UTC

    Now the guys have explained why your code is failing, you might also consider using:

    my $shop = m/.{8}(\d{4})/ ? $1 : '0000';

    or if you have an aversion to the ternary operator

    my $shop = '0000'; $shop = $1 if $AResp =~ /.{8}(\d{4})/;
Re: checking substring for numbers
by BorgCopyeditor (Friar) on Aug 01, 2002 at 20:11 UTC

    From perlsub:

    Unlike dynamic variables created by the local operator, lexical variables declared with my are totally hidden from the outside world

    BCE
    --Your punctuation skills are insufficient!

Re: checking substring for numbers
by dwatson06 (Friar) on Aug 01, 2002 at 20:06 UTC
    Please disregard the 'eq' in the source. I was trying to do a string comparison for empty input.

    Daniel