Kent, Mr. John (Contractor) wrote:
> Greetings,
> 
> Trying to be "cool" and apply  map to the following lines of code
> (which work fine as shown) 
> 
> @TIMES is an array of lines that look like
> Time: Thu Feb 3 15:10:39.290 GMT 2005 End: Default.2.def-edtp0.on
> Time: user 0.29 sec Delta: Default.2.def-edtp0.on
> Time: Thu Feb 3 15:10:43 GMT 2005 Start:
> Default.1.def-slpr-2m-t-10m-wind0.on 
> Time: Thu Feb 3 15:10:43.580 GMT 2005 End:
> Default.1.def-slpr-2m-t-10m-wind0.on 
> Time: user 0.58 sec Delta: Default.1.def-slpr-2m-t-10m-wind0.on
> 
>     use Tie::IxHash;
>     tie %BY_PROJ_HASH, "Tie::IxHash";
> 
>     my @DELTAS = grep (/Delta/, @TIMES);
> 
>     foreach (@DELTAS) {
>         $_ =
>         /(\d+\.\d+)\s+sec\s+Delta:\s+[Default\.]*\s*(.+)[\.on]*$/; my
>         $proj = $2; my $time = $1;

If the regex doesn't match, $1 and $2 will be unchanged. You should not use
them without checking for the match.

I prefer a list assignment like:

   my ($proj, $time) =
/(\d+\.\d+)\s+sec\s+Delta:\s+[Default\.]*\s*(.+)[\.on]*$/;

This will set the vars to undef if there is no match.

> 
>         print "<br>$proj => $time\n" if ($DEBUG == 1);
>         # Push the value into the hash making the value for the hash
>         # an array (See Perl Cookbook Recipe 5.7)
>         push( @{$BY_PROJ_HASH{$proj}},$time);
> 
>    }
> 
> So far haven't had any luck using map to create the hash of arrays
> %BY_PROJ_HASH.

I don't think a map() construct would improve on what you're doing, since
$proj presumably can vary with each iteration. Leave it like it is.

-- 
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