Beefy Boxes and Bandwidth Generously Provided by pair Networks Cowboy Neal with Hat
There's more than one way to do things
 
PerlMonks  

Re: Re: NEWBIE Brain Teaser #2, by nysus

by nysus (Deacon)
on Apr 16, 2001 at 01:28 UTC ( #72702=note: print w/ replies, xml ) Need Help??


in reply to Re: NEWBIE Brain Teaser #2, by nysus
in thread NEWBIE Brain Teaser #2, by nysus

Well, let's see...for Part A you guessed that the result would be "In the beginning there was nothing, in the end there will be nothing." But is this the result you got when you ran the script?

If you run the script through Perl, you'll actually get "In the beginning there was , in the end there will be ." But why?


Comment on Re: Re: NEWBIE Brain Teaser #2, by nysus
Re: Re: Re: NEWBIE Brain Teaser #2, by nysus
by Ri-Del (Friar) on Apr 16, 2001 at 01:59 UTC
    Yes that is exactly what I got. "In the beginning there was , in the end there will be ." As to the reason, the only thing I thought at first was that as far as I have learned "$_" and "@_" are actually similar to 'argv' in C. Since, we had not passed any parameters to the script nothing was printed out. So I tried that passing two parameters to the script when I ran it. However, as I am sure you know, nothing changed. I have considered that maybe the word 'nothing' is similar to declaring something null, however, I can not find anything to back this up. Does not @_ mean the same thing as @ARGV, that these are the arguments passed to a script? So that if I pass two arguments they will reside in $_[0] and $_[1]? So in effect about the only thing I can conclude at the moment (and I don't particularly like my answer) is that when we state @_ = qw(alpha omega); we are overwriting the first two parameters (if any were passed) and then in the second line, $_ = qw(nothing nothing); setting them both to null. So in effect we set two values, set them to null and then print them out. Am I close?
Re: Re: Re: NEWBIE Brain Teaser #2, by nysus
by nysus (Deacon) on Apr 16, 2001 at 02:24 UTC
    You are over complicating some things. First, answer this question and keep your answer as simple as possible:

    How do you pass an argument to a subroutine?

    Yes, there are a few different ways, but there is one way that is most commonly used nowadays and that's the answer I'm looking for.

Re(3): NEWBIE Brain Teaser #2, by nysus
by yakko (Friar) on Apr 16, 2001 at 06:33 UTC
    Because @_ is localised for the subroutine. Since you called subroutine with no parms, the @_ it's operating from has undef.

    As for &subroutine, @_ is not localised and the existing one is passed in. $_ need not apply outside the sub in any event -- the subroutine deals with @_.

    --
    Me spell chucker work grate. Need grandma chicken.

Re: Re: Re: NEWBIE Brain Teaser #2, by nysus
by nysus (Deacon) on Apr 16, 2001 at 06:47 UTC
    Give the man above a see-gar...well maybe half of one.

    You explanation is correct for Part B. But Part C yields "In the beginning there was nothing, in the end there will nothing." (At least it does in my version of Perl 5.005.) I'm not sure I quite follow your explanation for this result.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (6)
As of 2014-04-18 22:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (472 votes), past polls