Shawn Corey wrote:
> John W. Krahn wrote:
>> You can't because perl implements constants using subroutines and
>> subroutines
>> can only return a list.
> 
> Perl subroutines return only lists but it converts them to hashes
> automatically:
> 
> #!/usr/bin/perl
> 
> use strict;
> use warnings;
> 
> use Data::Dumper;
> 
> sub list_to_hash {
>   return qw( a 1 b 2 c 3 );
> }
> 
> my %hash = list_to_hash();

Any list can be assigned to a hash just as a hash can be assigned to a list.

> print Dumper( \%hash );
> 
> __END__
> 
> 
> The thing about constant is that does not create a true constant; it
> creates a reference to an anonymous subroutine.

If it were an anonymous code reference then it would have to be stored in a
scalar and have a '$' sigil in front of it.  Unless it was stored in a type
glob and then "strict 'subs'" would not allow it to be used without
parentheses or the '&' sigil.  It has to be a subroutine in the current
package for strict not to complain.  See the "Constant Functions" section in
perlsub.

> #!/usr/bin/perl
> 
> use strict;
> use warnings;
> 
> use constant STOPWORDS => map { $_, 1 } qw(a about above across adj after);
> 
> for my $key ( sort keys %{ { STOPWORDS } } ){
>   my $value = ${ { STOPWORDS } }{$key};

In both lines you are copying the entire list to an anonymous hash.  If you
want efficient code (and less punctuation) you should just use a hash.

>   print "$key => $value\n";
> }


John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to