in reply to array issue

First of all, local doesn't do what you'd expect. Change the local to my and you'll be ok. See local and my for the details.

You're inadvertently just splitting the input line on a space and putting the elements in an array. What you need to do is split the value of $1 (which is the string matched by the (\w+) part when you find a line that matches. So that part could be rewritten as

if (/^-- NAME:\s(.+)/) { @name = split(" ", $1); } if (/^-- TOYS:\s(.+)/) { @toys = split(" ", $1); }
I'm assuming that after "NAME" there can also be multiple names.

Arjen

Replies are listed 'Best First'.
Re: array issue
by jonadab (Parson) on Jan 24, 2004 at 01:56 UTC
    First of all, local doesn't do what you'd expect.

    I was going to point this out myself, if you hadn't already done so. The comment seems to indicate that the OP thinks local scopes lexically, which is wrong.

    Change the local to my and you'll be ok.

    Actually, in this specific case, I don't think the scoping of those variables matters. Unless there's a lot of stuff going on we don't know about in parts of the code that weren't shown, they could just as well be left in package scope. Still, the OP would do well to learn the difference between lexical and dynamic scoping (my and local, respectively), since in many cases they do indeed have drastically different effects.


    $;=sub{$/};@;=map{my($a,$b)=($_,$;);$;=sub{$a.$b->()}} split//,".rekcah lreP rehtona tsuJ";$\=$ ;->();print$/