Front page | perl.beginners |
Postings from June 2009
Re: Request for code feedback
Thread Previous
|
Thread Next
From:
Chas. Owens
Date:
June 13, 2009 08:55
Subject:
Re: Request for code feedback
Message ID:
58ce48dc0906130855g6a7ee8b8sff414b9e4993f545@mail.gmail.com
On Sat, Jun 13, 2009 at 07:30, John W. Krahn<jwkrahn@shaw.ca> wrote:
> Chas. Owens wrote:
>>
>> On Sat, Jun 13, 2009 at 03:48, John W. Krahn<jwkrahn@shaw.ca> wrote:
>>>
>>> Chas. Owens wrote:
>>>>
>>>> On Fri, Jun 12, 2009 at 20:24, Steve Bertrand<steve@ibctech.ca> wrote:
>>>>>
>>>>> my $hours_used = ($hours_lookup->get_month_hours($dbh, $username,
>>>>> $search_date, 'dialup'));
>>>>
>>>> Why are you creating a list here? Just say
>>>
>>> Do you mean the list ($dbh, $username, $search_date, 'dialup')? I think
>>> that is required for the function to work correctly. Otherwise there is
>>> no
>>> other list there, the external parentheses are superfluous and do not
>>> define
>>> a list. A scalar rvalue enclosed in parentheses is just a scalar value.
>>
>> No, it is a list of one item,
>
> perldoc perlfunc
> [ snip ]
> Remember the following important rule: There is no rule that relates
> the behavior of an expression in list context to its behavior in
> scalar context, or vice versa. It might do two totally different
> things. Each operator and function decides which sort of value it
> would be most appropriate to return in scalar context. Some
> operators return the length of the list that would have been
> returned in list context. Some operators return the first value in
> the list. Some operators return the last value in the list. Some
> operators return a count of successful operations. In general, they
> do what you want, unless you want consistency.
>
> A named array in scalar context is quite different from what would
> ^^^^^^^^^^
> at first glance appear to be a list in scalar context. You can’t
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^
> get a list like "(1,2,3)" into being in scalar context, because the
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> compiler knows the context at compile time. It would generate the
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> scalar comma operator there, not the list construction version of
> the comma. That means it was never a list to start with.
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> perldoc perlfaq4
> [ snip ]
> Data: Arrays
> What is the difference between a list and an array?
>
> An array has a changeable length. A list does not. An array is
> something you can push or pop, while a list is a set of values.
> Some people make the distinction that a list is a value while an
> array is a variable. Subroutines are passed and return lists, you
> put things into list context, you initialize arrays with lists, and
> you foreach() across a list. "@" variables are arrays, anonymous
> arrays are arrays, arrays in scalar context behave like the number
> of elements in them, subroutines access their arguments through the
> array @_, and push/pop/shift only work on arrays.
>
> As a side note, there’s no such thing as a list in scalar context.
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> When you say
>
> $scalar = (2, 5, 7, 9);
>
> you’re using the comma operator in scalar context, so it uses the
> scalar comma operator. There never was a list there at all! This
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> causes the last value to be returned: 9.
>
>
>> which in scalar context yields the last
>
> There is no such thing as a list in scalar context (see above.)
>
>> item (which also happens to be the only item) just like any other
>> list. You are correct that they are superfluous, that is why I am
>> asking him why he is bothering to create the list with them.
>
> Parentheses do not create a list, they are used to define precedence.
>
>
>> If the parentheses did not create a list then this code
>>
>> my $undef = ();
>>
>> Would produce an error because there is no scalar value to assign to
>> $undef. Instead, () is a list of no items which yields an undef in
>> scalar context. There is nothing magical about
>
> There is no such thing as a list in scalar context (see above.)
>
>
>> my $scalar = (1);
>>
>> that makes (1) not a list but a scalar instead, it follows the exact
>> same rules as all other lists: yield your last element in scalar
>> context. This is roughly the same as
>
> There is no such thing as a list in scalar context (see above.)
>
>
>> my $s = @a[0];
>>
>> It works, but is probably not what you meant to say.
>
>
>
>
> John
> --
> Those people who think they know everything are a great
> annoyance to those of us who do. -- Isaac Asimov
>
>
> --
> To unsubscribe, e-mail: beginners-unsubscribe@perl.org
> For additional commands, e-mail: beginners-help@perl.org
> http://learn.perl.org/
>
>
>
Alright, I concede my understand was flawed.
--
Chas. Owens
wonkden.net
The most important skill a programmer can have is the ability to read.
Thread Previous
|
Thread Next