Front page | perl.perl5.porters |
Postings from May 2012
[perl #113410] Warning if -i but no filenames given
From:
Ed Avis
Date:
May 28, 2012 03:07
Subject:
[perl #113410] Warning if -i but no filenames given
Message ID:
rt-3.6.HEAD-5009-1338199644-1470.113410-75-0@perl.org
# New Ticket Created by "Ed Avis"
# Please include the string: [perl #113410]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=113410 >
This is a bug report for perl from eda@waniasset.com,
generated with the help of perlbug 1.39 running under perl 5.14.2.
-----------------------------------------------------------------
[Please describe your issue here]
For oneliners it is common to use 'perl -i -pE' or some other
combination of -i with -n or -p. You might run perl over some
files returned from another command:
% perl -i -pE s/foo/bar/ `grep -rl baz`
This works well, except when grep returns no results. In that
case the command appears to hang, because perl is waiting to read
standard input.
Reading stdin when no filenames are given for -n/-p is long-
established and useful behaviour and I do not suggest changing it.
However, if the -i flag is given too, this is an indicator that
the user intends to work with files on disk, changing them in-place,
and did not intend to use perl as a filter for stdin/stdout.
I suggest adding a message to stderr if the -i flag is given but
no filenames:
No filenames on command line, reading from stdin
Now, the current behaviour is indeed documented in perlrun:
"the -i switch does not impede execution when no files are given..."
But I think it is not a very user-friendly behaviour. By all
means switch to reading stdin, but let the user know about it,
because otherwise (for command lines like the above example) the
user can't tell the difference betwen perl taking a long time to
execute and waiting for input.
If you are concerned about backwards compatibility with scripts
that may run perl -i as a filter command (even though this seems
a slightly pointless usage) then the warning message could be
printed only if stdin is a tty.
[Please do not change anything below this line]
-----------------------------------------------------------------
---
Flags:
category=core
severity=wishlist
---
This perlbug was built using Perl 5.14.2 in the Fedora build system.
It is being executed now by Perl 5.14.2 - Thu Feb 23 10:37:48 UTC 2012.
Site configuration information for perl 5.14.2:
Configured by Red Hat, Inc. at Thu Feb 23 10:37:48 UTC 2012.
Summary of my perl5 (revision 5 version 14 subversion 2) configuration:
Platform:
osname=linux, osvers=2.6.32-220.4.1.el6.x86_64,
archname=x86_64-linux-thread-multi
uname='linux x86-05.phx2.fedoraproject.org 2.6.32-220.4.1.el6.x86_64
#1 smp thu jan 19 14:50:54 est 2012 x86_64 x86_64 x86_64 gnulinux '
config_args='-des -Doptimize=-O2 -g -pipe -Wall
-Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
--param=ssp-buffer-size=4 -m64 -mtune=generic
-Dccdlflags=-Wl,--enable-new-dtags -DDEBUGGING=-g -Dversion=5.14.2
-Dmyhostname=localhost -Dperladmin=root@localhost -Dcc=gcc
-Dcf_by=Red Hat, Inc. -Dprefix=/usr -Dvendorprefix=/usr
-Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl5
-Dsitearch=/usr/local/lib64/perl5 -Dprivlib=/usr/share/perl5
-Dvendorlib=/usr/share/perl5/vendor_perl
-Darchlib=/usr/lib64/perl5
-Dvendorarch=/usr/lib64/perl5/vendor_perl
-Darchname=x86_64-linux-thread-multi -Dlibpth=/usr/local/lib64
/lib64 /usr/lib64 -Duseshrplib -Dusethreads -Duseithreads
-Dusedtrace=/usr/bin/dtrace -Duselargefiles -Dd_semctl_semun
-Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm
-Duseperlio -Dinstallusrbinperl=n -Ubincompat5005 -Uversiononly
-Dpager=/usr/bin/less -isr -Dd_gethostent_r_proto
-Ud_endhostent_r_proto -Ud_sethostent_r_proto
-Ud_endprotoent_r_proto -Ud_setprotoent_r_proto
-Ud_endservent_r_proto -Ud_setservent_r_proto
-Dscriptdir=/usr/bin'
hint=recommended, useposix=true, d_sigaction=define
useithreads=define, usemultiplicity=define
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=define, use64bitall=define, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing
-pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64',
optimize='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions
-fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic',
cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe
-fstack-protector -I/usr/local/include'
ccversion='', gccversion='4.6.2 20111027 (Red Hat 4.6.2-1)',
gccosandvers=''
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='gcc', ldflags =' -fstack-protector'
libpth=/usr/local/lib64 /lib64 /usr/lib64
libs=-lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread
-lc -lgdbm_compat
perllibs=-lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
libc=, so=so, useshrplib=true, libperl=libperl.so
gnulibc_version='2.14.90'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef,
ccdlflags='-Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE'
cccdlflags='-fPIC', lddlflags='-shared -O2 -g -pipe -Wall
-Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
--param=ssp-buffer-size=4 -m64 -mtune=generic'
Locally applied patches:
---
@INC for perl 5.14.2:
/home/eda/lib/perl5//x86_64-linux-thread-multi
/home/eda/lib/perl5/
/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5
/usr/share/perl5
.
---
Environment for perl 5.14.2:
HOME=/home/eda
LANG=en_GB.UTF-8
LANGUAGE (unset)
LC_COLLATE=C
LC_CTYPE=en_GB.UTF-8
LC_MESSAGES=en_GB.UTF-8
LC_MONETARY=en_GB.UTF-8
LC_NUMERIC=en_GB.UTF-8
LC_TIME=en_GB.UTF-8
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/home/eda/bin:/home/eda/bin:/home/eda/bin:/usr/local/bin:/bin:/usr/
bin:/sbin:/usr/sbin:/sbin:/usr/sbin:/sbin:/usr/sbin
PERL5LIB=/home/eda/lib/perl5/
PERL_BADLANG (unset)
SHELL=/bin/bash
______________________________________________________________________
This email has been scanned by the Symantec Email Security.cloud service.
For more information please visit http://www.symanteccloud.com
______________________________________________________________________
-
[perl #113410] Warning if -i but no filenames given
by Ed Avis