[Israel.pm] Perl Advocacy

david istermann interdist at gmail.com
Wed Dec 29 09:22:56 PST 2004

Levenglick Dov-RM07994  wrote:
> This is obviously an extremely ugly implementation, however 
> (and I havent tested it) should do the job.

>        if (ref($replace) eq 'SCALAR') {
>                $temp = join '|', @$replace;
>                $$str =~ s/($temp)/$$replace/g;
>        }
Shouldn't this be : $temp = join '|', @$orig; ?

Issac Goldstand  wrote:
> A hash table uses a hash algorithm and buckets to store the data in memory.  
> An array is a sequential data set with records of a preset size (pointers/refs/etc 
> have static small sizes), sitting in memory.

I know that. That's the internal implementation point of view. But
from the point of view of the end-user (that is, the Perl programmer)
these two data types provide almost the same functionality.
Why 'each' is restricted to hashes, and 'foreach' to arrays only? I
think I should be able to do both:

while ( ($key, $val) = each(%myhash) ) {...}   # $key is a string
while ( ($key, $val) = each(@myarray) ) {...}   # $key is an integer

foreach $key (@myarray) {...}
foreach $key (%myhash) {...}

and even,
foreach ($key, $val) (@myarray) {...}
foreach ($key, $val) (%myhash) {...}

The same way as exists() and delete() work for both data types. Won't
it be handy? Perl has a lot of "automagic" features already - so
determining "magically" whether an array is given it or a hash, does
deserve it's place.


More information about the Perl mailing list