> I'm trying to create a packed exe to deploy on windows servers.
Build
> as 'pp -o file.exe script.pl' . Builds fine, but when I run it I get:
>
> Undefined subroutine &Scalar::Util::refaddr called at overload.pm
> line92.
>
> In an attempt to troubleshoot this, I added:
> use Scalar::Util qw(refaddr);
> to the script.
>
> The script still runs fine when I run script.pl through perl, but now,
> when I package the exe, and run it i get:
> "refaddr" is not exported by the Scalar::Util module
Can you verify that Scalar::Util was correctly packed by running
unzip -l file.exe
You should see something like
...
3370 03-30-06 14:12 lib/Scalar/Util.pm
...
28770 11-02-05 09:49 lib/auto/List/Util/Util.dll
(that's right: List/Util/Util.dll is where the XS version of refaddr
comes from)
Note that I couldn't reproduce your problem with the following oneliner
(ActiveState 5.8.7 build 815, PAR 0.92, Scalar::Util 1.14)
pp -o ref.exe -e "use Scalar::Util qw/refaddr/; my $x; my $a=refaddr
\$x; print qq[refaddr=$a\n];"
Cheers, Roderich
>
> This is somewhat confusing, as obviously Scalar::Util successfully
> exportts refaddr when run as a perl script, but as the
> packaged exe, it
> does not.
>
> In Scalar/Util.pm:
> refaddr is listed in @EXPORT_OK
> however, sub refaddr { ... } is in a block that is only eval'd if a XS
> import fails. Somehow it appears that in the pp packed
> version, the XS
> doesn't load, but that block is not evaled either, as the refaddr
> function is not exportable.
>
> I guess I can fix it by hacking the XS load out of Scalar/Util.pm, and
> forcing the sub refaddr { ... } perl function to be eval'd, but I was
> sort of hoping someone else had a cleaner way to do this.
>
>
> Thanks.
>
>
>
> --
> ***********************************
> * Alex Laslavic
> * Linux Engineer
> * WorldTravel BTI
> * x49511
> * gpg/pgp key at
> * http://keys.jumpbox.net
> ***********************************
>