in reply to use locale/utf8 scoping


An interesting question. I guess the problem comes down to the fact that the pragmata are set at compile time but you wish to change then at run time.

I don't think that this is possible. I tried to set $^H and to use pragma->unimport() at run-time but these approaches didn't (and probably shouldn't) work.

If you can set some of the logical variables at compile time you could possibly do something like this (using strict instead of utf8 as an example):

#!/usr/bin/perl -l my $foo; BEGIN {$foo = rand 2 > 1} BEGIN {require strict; strict->import('vars') if $foo} $not_scoped = 1; # Error if $foo is true BEGIN {strict->unimport('vars')} $not_scoped = 1; # Not an error print "Finished." __END__

--
John.

Replies are listed 'Best First'.
Re: Re: use locale/utf8 scoping
by mirod (Canon) on Aug 07, 2002 at 11:13 UTC

    The biggest problem is that use locale and use utf8 are scoped to the enclosing block, contrary to strict.

    I define an XML name to be my $REG_NAME= q{[^\W\d_][\w:.-]*}; and when I match a name, in different places in the module, I'd like the \W and \w to use the locale/utf8 pragma, depending on a variable set by the user.

    The solutions I can think of are: testing everywhere I match (a pain, and it means duplicating code) or create a method that would just do the match (but it would actually have to be several methods, one for each regexp in which I use $REG_NAME, plus it will probably impact the performaces, I have to assess this). It is easier when the match is done through a dynamically generated function, because I can include the use in the text of the function.