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

Reply via email to