develooper Front page | perl.perl6.language | Postings from February 2002

Re: Topicalizers: Why does when's EXPR pay attention to topicalizer r egardless of associated variable?

From:
Allison Randal
Date:
February 27, 2002 10:03
Subject:
Re: Topicalizers: Why does when's EXPR pay attention to topicalizer r egardless of associated variable?
Message ID:
20020227180304.GC6059@shadowed.net
On Wed, Feb 27, 2002 at 10:32:24AM -0600, Garrett Goebel wrote:
> 
> Why does C<when>'s EXPR pay attention to the topicalizer regardless of
> associated variable?
> 
> Why introduce the special case? Especially when consistency and
> simplification seem to be a strong undercurrent in Perl6? I'm curious what
> the reasoning behind the special case is. I don't see what it gives us...
> beside one more thing to remember. What would be a use case that illustrates
> the need for the special case? And is the special case the common one?
> 
> $_ = 'foo';
> given 'bar' -> $f {
>   if   /foo/ {print};       # true, prints 'foo'
>   when /bar/ {print};       # true, prints 'foo'
>   when /bar/ -> $g {print}; # true, prints what? 'foo'
> }

Why? Because it's oh-so dwim. Think about it, if you've just typed a

	given $x { ...
or
	given $x -> $y { ...

you know for a fact that you're going to want every C<when> to
compare against the $_ or $y. Why force people to type:

		when $y =~ /a/ {...}
		when $y =~ /b/ {...}
		...

when you already know what they mean? And yes, it's the common case. How
many times do you think you'll have a switch statement and want the case
to compare against some value external to the switch?

	$_ = 'foo';
	given 'bar' -> $y {
		when /a/ {...} 
	}

It's counterintuitive for this to translate to "When that foo value
matches /a/ then take an action." If you'd meant that, it would make
alot more sense to do:

	given 'foo' {
		when /a/ {...} 
	}


Allison



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About