develooper Front page | perl.perl5.porters | Postings from May 2012

[perl #113410] Warning if -i but no filenames given

Ed Avis
May 28, 2012 03:07
[perl #113410] Warning if -i but no filenames given
Message ID:
# New Ticket Created by  "Ed Avis" 
# Please include the string:  [perl #113410]
# in the subject line of all future correspondence about this issue. 
# <URL: >

This is a bug report for perl from,
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]
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:

    osname=linux, osvers=2.6.32-220.4.1.el6.x86_64,
    uname='linux 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
    -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
    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
    cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing
-pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE
    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)',
    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',
    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,
  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:

Environment for perl 5.14.2:
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PERL_BADLANG (unset)

This email has been scanned by the Symantec Email service.
For more information please visit
______________________________________________________________________ Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About