On Aug 14, 3:57 pm, [EMAIL PROTECTED] (Jay Savage) wrote:
> On 8/12/07, Mr. Shawn H. Corey <[EMAIL PROTECTED]> wrote:
>
> > John W. Krahn wrote:
> > > yitzle wrote:
> > >> Works:
> > >> my $t = shift;
> > >> my $id = qr($t);
> > >> Doesn't work:
> > >> my $id = qr(shift);
>
> > >> Why?
>
> > > perldoc -q "How do I expand function calls in a string"
>
> > It's because qr is not a function, it's a quote-like operator.
>
> No, it's because shift *is* a function.
>
> As OP's example shows, variables interpolate, functions don't. The
> difference between qr($t) and qr(shift) doesn't have anything to do
> with qr().
Of course it does. That's utter nonsense. Functions passed as
arguments to functions get called. Functions included in strings do
not. qr() is a quoting mechanism. Its result is a string
> It has to do with shift's behavior WRT string
> interpolation. It doesn't matter whether the interpolated string is
> being passed to an operator, a function, a subroutine, or someplace
> else:
More absurdity.
$ perl -le'
sub foo {
print @_;
}
@ARGV = (qw/alpha beta gamma/);
foo(shift);
'
alpha
Of COURSE it matters how the function is being used. If it's being
included in a string (whether it's a "", '', qq, q, qr, qw, or qx)
it's just the name of the function that gets included in the string.
If it's passed as an argument to a function, it gets called and its
return value(s) are passed in its place.
Paul Lalli
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/