Front page | perl.perl5.porters |
Postings from January 2012
[perl #108780] overload::StrVal and qr//
Thread Next
From:
Father Chrysostomos
Date:
January 22, 2012 12:58
Subject:
[perl #108780] overload::StrVal and qr//
Message ID:
rt-3.6.HEAD-14510-1327265876-1128.108780-75-0@perl.org
# New Ticket Created by Father Chrysostomos
# Please include the string: [perl #108780]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=108780 >
According to the overload documentation, overload::StrVal returns the string that "" would return in the absence of string overloading.
But this isn’t actually the case:
$\ = "\n";
use overload;
no overloading;
print qr//; # prints (?^:)
print overload::StrVal(qr//); # prints Regexp=REGEXP(0x803e50)
qr// thingies are not actually using overloading.
overload::StrVal pretends that they are.
The overloading pragma knows they are not.
Should one of overload::StrVal and overloading.pm change to match the other?
Or should the we just document this oddity?
This discrepancy is unfortunate, as it prevents this type of simplification:
commit 8f6eeb4da8aeaa8cbb3b291181bdac4515d92e2d
Author: Father Chrysostomos <sprout@cpan.org>
Date: Wed Jan 18 13:03:32 2012 -0800
In overload::AddrRef, use ‘no overloading’
This speeds this up by about 13 times.
diff --git a/lib/overload.pm b/lib/overload.pm
index a2797e7..2cd98bb 100644
--- a/lib/overload.pm
+++ b/lib/overload.pm
@@ -113,17 +113,8 @@ sub Method {
}
sub AddrRef {
- my $package = ref $_[0];
- return "$_[0]" unless $package;
-
- local $@;
- local $!;
- require Scalar::Util;
- my $class = Scalar::Util::blessed($_[0]);
- my $class_prefix = defined($class) ? "$class=" : "";
- my $type = Scalar::Util::reftype($_[0]);
- my $addr = Scalar::Util::refaddr($_[0]);
- return sprintf("%s%s(0x%x)", $class_prefix, $type, $addr);
+ no overloading;
+ "$_[0]";
}
*StrVal = *AddrRef;
---
Flags:
category=core
severity=low
---
Site configuration information for perl 5.15.6:
Configured by sprout at Mon Jan 16 08:41:41 PST 2012.
Summary of my perl5 (revision 5 version 15 subversion 6) configuration:
Commit id: bdd2b37b5c6133a3b8647bb19d63f9598457d4d4
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 -DDEBUGGING'
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 -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include',
optimize='-O3 -g',
cppflags='-fno-common -DPERL_DARWIN -DDEBUGGING -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.6:
/usr/local/lib/perl5/site_perl/5.15.6/darwin-2level
/usr/local/lib/perl5/site_perl/5.15.6
/usr/local/lib/perl5/5.15.6/darwin-2level
/usr/local/lib/perl5/5.15.6
/usr/local/lib/perl5/site_perl
.
---
Environment for perl 5.15.6:
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
Thread Next
-
[perl #108780] overload::StrVal and qr//
by Father Chrysostomos