On 9/11/07, Palit, Nilanjan <[EMAIL PROTECTED]> wrote: > So I tried this using the following code, where %format_conv has an > entry for each type of conversion needed with a list of items: [...] > When I run it, the 'defined' part works fine, but I get an error on the > last line: > > Can't use string ("formatconv_bidir2in") as a subroutine ref while > "strict refs" in use at bsdl_gen.pl line 238.
I'm very glad you have that check. Read http://perl.plover.com/varvarname.html and the two follow-up posts that it links to to understand why you really don't want to accidentally use symbolic refs. > How do I get this sub call to work with the sub name in a variable? Two options. One is that you can locally turn off that check with no strict 'refs'; just before the subroutine call. The other is that you could take a reference to the subroutine and use that: my $sub = \&$subname; # time passes $sub->(@args); (I've never quite understood why that's allowed by strict 'refs', but it is.) A random incidental note. It is very bad form to use map as a looping construct. If you're going to insist on writing that loop inline, use an inline for loop. Like this: $sub->($_) for @itemlist; #Convert all the items A second random incidental note. I've found that it is generally a bad idea to change the format of variables in place. If for no other reason than the fact that you're unable to give the variables an unambiguous name. Read chapter 11 in Code Complete 2 to learn more about good variable names. (Read the rest of the book while you're at it...) Cheers, Ben _______________________________________________ Boston-pm mailing list Boston-pm@mail.pm.org http://mail.pm.org/mailman/listinfo/boston-pm