develooper Front page | perl.perl5.porters | Postings from March 2001

[ID 20010309.009] my $var = val if (..) doesn't work properly

Thread Next
From:
madison
Date:
March 9, 2001 16:31
Subject:
[ID 20010309.009] my $var = val if (..) doesn't work properly
Message ID:
200103100029.QAA29026@madison-home.transmeta.com
This is a bug report for perl from perlbug@daveola.com,
generated with the help of perlbug 1.26 running under perl 5.00503.


-----------------------------------------------------------------
[Please enter your report here]

If a variable is declared "my" and then conditional set with
a trailing if, the value is *not* undefined if the condition isn't
met.  Here's some example code:

-------------------------
sub joe {
  # These should arguably be the same:
  #my $x; $x = 42 if (0);
  my $x = 42 if (0);

  print "x: $x\n";
  $x = 1001;    # This setting should be lost
} 

joe();
joe();
-------------------------

The first line declares the variable and then conditionally either sets
the variable or leaves it as undef.
The second line declares the variable, and conditionally either sets
the variable or leaves it as junk (most likely the previous my value)

You could argue that the "my" becomes part of the condition, so if
the condition is false, then the variable isn't scoped as a my variable,
but if that was the case the script should get an error from "use strict"


[Please do not change anything below this line]
-----------------------------------------------------------------

---
Site configuration information for perl 5.00503:

Configured by root at Mon Aug 30 23:08:56 EDT 1999.

Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
  Platform:
    osname=linux, osvers=2.2.5-22smp, archname=i386-linux
    uname='linux porky.devel.redhat.com 2.2.5-22smp #1 smp wed jun 2 09:11:51 edt 1999 i686 unknown '
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef useperlio=undef d_sfio=undef
  Compiler:
    cc='cc', optimize='-O2', gccversion=egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
    cppflags='-Dbool=char -DHAS_BOOL -I/usr/local/include'
    ccflags ='-Dbool=char -DHAS_BOOL -I/usr/local/include'
    stdchar='char', d_stdstdio=undef, usevfork=false
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    alignbytes=4, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -ldl -lm -lc -lposix -lcrypt
    libc=, so=so, useshrplib=false, libperl=libperl.a
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:
    

---
@INC for perl 5.00503:
    /usr/lib/perl5/5.00503/i386-linux
    /usr/lib/perl5/5.00503
    /usr/lib/perl5/site_perl/5.005/i386-linux
    /usr/lib/perl5/site_perl/5.005
    .

---
Environment for perl 5.00503:
    HOME=/home/madison
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/madison/bin/i386-linux-libc6:/home/madison/bin:.:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/openwin/bin:/usr/sbin:/sbin:/usr/local/sbin:/proj/hw/bin:/proj/hw/bin/i386-linux-libc6:/cad/scripts:/usr/local/contrib/bin:.:/proj/sw/astro/tools/i386-linux-libc6/bin
    PERL_BADLANG (unset)
    SHELL=/bin/tcsh


Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About