develooper Front page | perl.perl5.porters | Postings from January 2008

Re: [perl #50256] segfault on perl -e 'split //, unpack "(B)*","ab"'

Thread Previous
H.Merijn Brand
January 26, 2008 02:36
Re: [perl #50256] segfault on perl -e 'split //, unpack "(B)*","ab"'
Message ID:
On Sat, 26 Jan 2008 05:27:05 +0000, "Ævar Arnfjörð Bjarmason"
<> wrote:

> This looks to my untrained eye like something unpack is causing its
> return value to be a damaged PMOP.
>     $ ./perl -le 'split //, unpack("(B)*", "ab")'
>     Segmentation fault
>     $ ./perl -le 'my $s = unpack("(B)*", "ab"); split //, $s'
>     $ ./perl -le 'my $s = unpack("(B)*", "ab"); unpack "(a)*", $s'
>     $ ./perl -le 'unpack "(a)*", unpack("(B)*", "ab");'
>     Invalid type '0' in unpack at -e line 1.
> This will actually segfault at different times in Perl_pp_split
> depending on whether you compile with -DDEBUGGING or not, at least on
> my system.
> :
> (btw how does one build perl without -DDEBUGGING properly? I did
> `./Configure -Dcc='ccache gcc' -Dld=gcc -Doptimize=-ggdb3 -d -e' which
> put -DDEBUGGING in my makefile, presumably because it picked up
> -ggdb3, I edited the definition out by hand)

I hope I was explainatory enough in my addition to INSTALL when I added
support for -DDEBUGGING to Configure:

      Building a debugging perl

       You can run perl scripts under the perl debugger at any time with perl
       −d your_script.  If, however, you want to debug perl itself, you
       probably want to have support for perl internal debugging code
       (activated by adding −DDEBUGGING to ccflags), and/or support for the
       system debugger by adding −g to the optimisation flags. For that, use
       the parameter:

               sh Configure −DDEBUGGING


               sh Configure −DDEBUGGING=<mode>

       For a more eye appealing call, −DEBUGGING is defined to be an alias for
       −DDEBUGGING. For both, the −U calls are also supported, in order to be
       able to overrule the hints or settings.

       Here are the DEBUGGING modes:

           Sets both −DDEBUGGING in the ccflags, and adds −g to optimize.

           You can actually specify −g and −DDEBUGGING independently (see
           below), but usually it’s convenient to have both.

           Adds −g to optimize, but does not set −DDEBUGGING.

           (Note:  Your system may actually require something like cc −g2.
           Check your man pages for cc(1) and also any hint file for your

           Removes −g from optimize, and −DDEBUGGING from ccflags.

       If you are using a shared libperl, see the warnings about multiple
       versions of perl under "Building a shared Perl library".

H.Merijn Brand         Amsterdam Perl Mongers (
using & porting perl 5.6.2, 5.8.x, 5.10.x  on HP-UX 10.20, 11.00, 11.11,
& 11.23, SuSE 10.1 & 10.2, AIX 5.2, and Cygwin.  

Thread Previous Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About