FAQ
# New Ticket Created by Father Chrysostomos
# Please include the string: [perl #97466]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=97466 >


I was trying to call a subroutine with the current @_, and check its return value for definition. So I changed

defined &foo

which obviously doesn’t work, to

defined do { &foo }

That didn’t help. In playing around with it, I’ve found it actually to be interestingly buggy:

$ perl -le'sub foo{warn called} print defined(scalar(42,&foo))'
1

Didn’t expect that, did you?

This is even better:

$ perl -le'sub foo{} defined do{();&foo}'
Bizarre copy of CODE in leave at -e line 1.

I get those same results with every version I’ve tried from 5.6.2 to 5.15.1.

I don’t think defined should be propagating ref context that far. In other words, S_doref in op.c should be circumspect about calling itself when the type is OP_DEFINED.

Likewise, I don’t think defined($false ? $scalar : @array) should be doing defined (@array), but the equivalent of defined(my $tmp = @array) (without the $tmp).

defined(scalar @foo) also is a bit surprising. It does the same thing as defined(@foo). From the point of view of the implementation, that makes some sense. But scalar() is documented as a function, not a flag on an operator, so I would expect scalar @foo to return the length, and defined to return true because the length is defined.

---
Flags:
category=core
severity=low
---
Site configuration information for perl 5.15.1:

Configured by sprout at Fri Jul 22 19:53:36 PDT 2011.

Summary of my perl5 (revision 5 version 15 subversion 1) configuration:
Snapshot of: 862b2c434beb1d61a19037a8449c8db953fd37a0
Platform:
osname=darwin, osvers=10.5.0, archname=darwin-2level
uname='darwin pint.local 10.5.0 darwin kernel version 10.5.0: fri nov 5 23:20:39 pdt 2010; root:xnu-1504.9.17~1release_i386 i386 '
config_args='-de -Dusedevel'
hint=recommended, useposix=true, d_sigaction=define
useithreads=undef, usemultiplicity=undef
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=undef, use64bitall=undef, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cc', ccflags ='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include',
optimize='-O3',
cppflags='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
ccversion='', gccversion='4.2.1 (Apple Inc. build 5664)', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-protector -L/usr/local/lib'
libpth=/usr/local/lib /usr/lib
libs=-ldbm -ldl -lm -lutil -lc
perllibs=-ldl -lm -lutil -lc
libc=, so=dylib, useshrplib=false, libperl=libperl.a
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector'

Locally applied patches:


---
@INC for perl 5.15.1:
/usr/local/lib/perl5/site_perl/5.15.1/darwin-2level
/usr/local/lib/perl5/site_perl/5.15.1
/usr/local/lib/perl5/5.15.1/darwin-2level
/usr/local/lib/perl5/5.15.1
/usr/local/lib/perl5/site_perl
.

---
Environment for perl 5.15.1:
DYLD_LIBRARY_PATH (unset)
HOME=/Users/sprout
LANG=en_US.UTF-8
LANGUAGE (unset)
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/bin
PERL_BADLANG (unset)
SHELL=/bin/bash

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupperl5-porters @
categoriesperl
postedAug 22, '11 at 12:49a
activeAug 22, '11 at 12:49a
posts1
users1
websiteperl.org

1 user in discussion

Father Chrysostomos: 1 post

People

Translate

site design / logo © 2022 Grokbase