Elizabeth Mattijsen <liz@dijkmat.nl> wrote: > At 01:04 +0200 9/8/03, Rafael Garcia-Suarez wrote: > >Elizabeth Mattijsen wrote: > > > If I build 21021 with: > > > > -Accflags=-DNO_HASH_SEED > >You can always do 'perl -V:ccflags'. That should be there. > > You learn something every day. Thanks, Rafael. > > > I concocted the following check routine. Maybe this needs a home > somewhere in a Util core library somewhere? If so, I'll supply a > patch for the indicated library. > > I also made it print something in void context, so you'll be able to > do one-liners such as: > > perl -Mwhatever -e is_hash_randomized > > (if is_hash_randomized in module whatever.pm would be exported, of course) > > > Liz > > > The code: > > #--------------------------------------------------------------------------- > # is_hash_randomized > # > # OUT: 1 undef (random sequence) or defined (repeatable with seed) > # > # Prints a string when called in void context. > > sub is_hash_randomized { > > # If we're called in void context > # Call ourselves to get status > # Show the world what it is > # We're done now > > if (!defined wantarray) { > my $seed = is_hash_randomized(); > print defined $seed ? > qq{Repeatable hash sequences with seed "$seed".\n} : > qq{Unrepeatable hash sequences.\n}; > return; > } > > # We don't have any random sequences yet, as if seed "0" > > return 0 if $] < 5.008001; > > # Get the -Accflags= settings using this Perl executor > > open my $handle, "$^X -V:ccflags |" > or die "Could not execute $^X -V:ccflags: $!\n"; > my $ccflags = <$handle>; > close $handle; Maybe better use: require IO::Pipe; my $pipe = IO::Pipe->new->reader($^X, "-V:ccflags"); my $ccflags = <$pipe>; $pipe->close; I think the code above does not handle a value for $^X = "C:\Dokumente und Einstellungen\Perl\Bin\perl.exe" very well... > # Return repeatable default if random sequences compiled out > # Return random if switch settings reversed and environment variable set > # Return whatever the environment variable indicates > > return 0 if $ccflags =~ m#-DNO_HASH_SEED#; > return if $ccflags =~ m#-DUSE_HASH_SEED_EXPLICIT# > and exists $ENV{PERL_HASH_SEED}; > $ENV{PERL_HASH_SEED}; > } #is_hash_randomized Regards, SlavenThread Previous | Thread Next