Scope of variables in a function

Hakim Cassimally hakim.cassimally at gmail.com
Sat Jun 1 18:03:33 BST 2013


Andy,

I believe your problem is:

    my $x = 'FOO' if $condition;

This only declares the new variable if $condition, so it ends up having
surprising, static-like behaviour, which you probably shouldn't rely on.

Rewriting to:

   my $result;
   $result = 'FOO' if ...

gives your expected result.

osf'

On 1 June 2013 17:43, Andrew Beverley <andy at andybev.com> wrote:

> Could somebody explain why the following code prints "barbar" rather
> than "bar" please? I am trying to understand why the $result variable in
> the search function retains its value the second time the function is
> called.
>
> Up until now I had thought that variables in a function defined with
> "my" would be empty each time the function was called, so this has
> caught me out.
>
> The code is just proof of concept: I realise that it could be written
> more efficiently!
>
>
> sub search($)
> {
>   my $in = shift;
>   my $result = "FOO" if $in =~ /foo/;
>   $result = $1 if ($in =~ /^(bar)/);
>   return $result;
> }
>
> print search("bar");
> print search("none");
>
>
> Thanks,
>
> Andy
>
>
>


More information about the london.pm mailing list