Thanks to all who replied.
|---------+---------------------------->
| | "Rob Dixon" |
| | <[EMAIL PROTECTED]|
| | m.co.uk> |
| | |
| | 02/07/2003 05:09 |
| | PM |
| | |
|---------+---------------------------->
>--------------------------------------------------------------------------------------------------------------|
|
|
| To: [EMAIL PROTECTED]
|
| cc:
|
| Subject: Re: calling a subroutine as an element of a hash table...
|
>--------------------------------------------------------------------------------------------------------------|
Peter Farrar wrote:
> Hi All,
>
> I swear I've called subroutines this way before, but I can't find any
> examples.
> In this case, I'm looking to build some time/date functions.
> Regardless of what the actual code is supposed to do, the calling of
> subroutines as elements of a hash is causing me grief. I am
> receiving the following message:
>
> Undefined subroutine &main:: called at D:
> \perldev\workroom\dates\dates.pl line 16.
>
> Here is the code. Can anyone see what I am doing wrong here???
I'm afraid this is mainly just another
use strict;
rant. You have three different hashes in use. Look:
> %date_formats = (
1) %date_formats
> # "ccyymmdd" => {now => \ccyymmdd_now()},
> "ccyymmdd" => {now => sub {
> my @arr = localtime();
> 1900 + $arr[5] . sprintf("%02d",$arr[4] + 1) .
> sprintf("%02d",$arr[3]);
> }
> },
>
> "yyyymmdd" => {now => ${$formats{"ccyymmdd"}}{now},},
> );
2) %formats
Also, you need a separate statement to defined a key value in terms
of another value in the same key. Otherwise you could define
recursive hashes! Like this:
$date_formats{yyyymmdd}{now} = $date_formats{ccyymmdd}{now};
> sub now {
> my $format = shift;
> $format =~ tr/A-Z/a-z/;
>
> if (exists $date_formats{$format}){
> # Not working...
> &{${$date_format{$format}}{now}}();
3) %date_format
Can also be written:
$date_formats{$format}{now}();
> }else{
> print STDERR "invalid format\n";
> }
> }
>
[snip trailing code]
If you'd used strict, you would have had to declare all of those
hashes, and would certainly have realised that you were using
three independent ones!
Cheers,
Rob
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]