Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: Re: Re: Re: if only blocks were avoidable...

by yosefm (Friar)
on Sep 22, 2003 at 15:30 UTC ( #293153=note: print w/replies, xml ) Need Help??

in reply to Re: Re: Re: if only blocks were avoidable...
in thread if only blocks were avoidable...

Yes, that's exactly what I need. And it also shows a very interesting feature of perl - I never thought about evaling <DATA>, so ++. Also I always think of eval BLOCK while there's also an eval EXPR that I always forget.
  • Comment on Re: Re: Re: Re: if only blocks were avoidable...

Replies are listed 'Best First'.
Re^5: if only blocks were avoidable... (use twice)
by tye (Sage) on Sep 23, 2003 at 16:52 UTC

    Note that a single script can't safely use your module twice. This means that any modules that try to use your module can't be safely used with any other such modules. I don't know what your module does, but it seems quite unfortunate to me.

    I'd probably have three packages. Here is a simplistic example:

    package Your::Module::Bytes; use bytes; do $INC{"Your/"} . ".pl"; 1;
    package Your::Module::Unicode; no bytes; do $INC{"Your/"} . ".pl"; 1;
    package Your::Module; sub import { # require the desired submodule # dispatch import to that submodule }

    Note, I'd have to test to make sure that 'use bytes' affects the code included via do, but I believe that it does.

    I'm also a bit curious what particular effect of 'use bytes' you need. I thought that such was mostly of use for the earliest versions of Perl Unicode support.

                    - tye
      I see the problem here, but if I understand your code correctly then I'll have to dispatch every subroutine call to the right module. The problem here is that my module is that import is not the only method called on this module, since it is an object, so import is only used as a class initializer.

      Oh, maybe I'll just start every subroutine with a conditional bytes->import. Not lazy enough, I know, but it seems that Laziness doesn't get me much here.

      As for what it does, this module creates a multy-level Javascript menu (I'm sure there are some available on CPAN but I didn't find quite what I need and anyway DIY is more fun).

      The reason I need 'use bytes' is for documents printed in legacy encodings. It turns out that perl spontaneously converts strings to unicode when some internal functions are used and then you get garbage in the browser. So I want to allow the user of my module to state that he uses legacy encoding and deal with it properly.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://293153]
[choroba]: LanX Same here.

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (7)
As of 2017-02-19 14:37 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (292 votes). Check out past polls.