Front page | perl.perl5.porters |
Postings from April 2010
Re: RFC: Perl manual pages -- update to follow the perlstyle.pod guidelines
Thread Previous
|
Thread Next
From:
Tom Christiansen
Date:
April 3, 2010 17:58
Subject:
Re: RFC: Perl manual pages -- update to follow the perlstyle.pod guidelines
Message ID:
20809.1270342649@chthon
In-Reply-To: Message from Aristotle Pagaltzis <pagaltzis@gmx.de>
of "Sun, 04 Apr 2010 02:19:22 +0200."
<20100404001921.GM13645@klangraum.plasmasturm.org>
>>> As Tom said, and and or are no safer than && and ||, they just have
>>> a different precedence. The `safer' part is when parens are left out
>>> open (FOO, "foo.txt") || die $!; OK
>>> open FOO, "foo.txt" || die $!; Wrong
>>> open (FOO, "foo.txt") or die $!; OK
>>> open FOO, "foo.txt" or die $!; OK
>> That certainly does look safer to me, yep.
> It's safer in this example. It's more dangerous in other examples.
> Eric Brine gave one. You'll do well to consider both examples before
> you formulate an opinion. You'll find that they're simply differently
> useful, and that safety has nothing to do with it.
if you are not afraid of parens and use them consistently and
and or are never useful and in fact only make things harder to
read not easier
open FOO, "foo.txt" or die $!;
That takes much more time for me to parse, just as I'm sure the previous
sentence did you. Punctuation can be good for the mind: it's bothersome
and error-prone to *have* to think about precedence and to take into
consideration a logical operator with the same lexical texture as a
function call.
Neither of those annoying problems occurs in the simple and predictable
version:
open(FOO, "foo.txt") || die "can't open foo.txt: $!";
No special knowledge is needed. It just works, *always*--which I
construe to be a very strong feature. No monkey business.
I'm perfectly consistent about this, and I always have been. Really. I've
never, ever had any sort of "safety" issue whatsoever, all the way back to
the very first day Perl was publicly released. See below; some of these
are from perl1, as you'll see. Sure, I'm more consistent about whitespace
and quotes now, but I've always used parens instead of using or or and, all
because I simply never bought into the no-paren seduction.
I'm not trying to sell anyone. I'm just reporting what works for me.
Oh, and please pretty please don't go breaking any of these beauties. :)**2
--tom
F: open (FINGER, "$exec 2>&1 |") || die "Can't open finger pipe\n";
INC: open(STDOUT, ">/dev/null") || die "reopen STDOUT: $!";
W.oneill: open(PIPE)|| die "$0: can't open $PIPE: $!\n";
W.oneill: $PIPE= "/usr/ucb/w|"; open(PIPE)|| die "$0: can't open $PIPE: $!\n";
Who: open(UTMP,'/etc/utmp') || die "can't open utmp: $!";
Who: open(TTYS, "/etc/ttys") || die "can't open /etc/ttys: $!";
addcorr: open(FH, "< $chapdir/$_") || die "$chapdir/$_: $!";
ah: open(HOSTS, ">>/etc/hosts") || die "can't append to /etc/hosts: $!";
ah: open(NS, "nslookup $host |") || die "can't fork: $!";
allprocm: open (PROCMAIL, "|procmail") || die $!;
apropos: (open PAGE) || die ("$program: can't open $PAGE to check filters: $!\n");
aub: (open(DECODE, "> $temp_decode_file")) ||
aub: (open(CHECKPOINT, "> $aub_tmp")) || # This is just temporary...
bacctsum: open(file) || die "$program: can't open $file: $!, aborting";
badman: (open PAGE) || die ("$program: can't open $PAGE to check filters: $!\n");
bug: open (TMP, ">$TMP") || die "can't create $TMP: $!";
bug: open(FILE) || die "can't open $FILE: $!";
bug: open(TMP) || die "can't reopen $TMP: $!";
bug: open(DEAD,">$DEAD") || die "can't open $DEAD: $!";
bvi: open(TTY, "/dev/tty") || die "no /dev/tty: $!";
bvi: open (FIFO, $fifo) || die "can't open $fifo: $!";
c2ph: open (PIPE, "|". ($ENV{PAGER} || 'more'));
c2ph: open (TMP, ">$TMP") || die "can't open $TMP: $!";
chkfork: open(MEMINFO) || die "can't open $MEMINFO: $!";
cibitch: open(M, "|/usr/lib/sendmail -oi -t") || die;
ckusers: open ( stdin, $users) || die "can't open $users file: $!, aborting";
ckusers: open(shells) || die "$program: couldn't open $shells: $!\n";
ckusers: open(hosts) || die "$program: couldn't open $hosts: $!\n";
ckusers: open(groups) || die "$program: couldn't open $groups: $!\n";
clip: open(ART,"$ng/$art") || next;
clip: open(LOG,"$NEWSLIB/history") || die "Can't open log: $!\n";
clip: open(LOG,"$NEWSLIB/history") || die "Can't open log: $!\n";
countf: if (-t STDOUT) { open(STDOUT, "|" . ($ENV{PAGER} || 'less')) }
cshbitch: open(MAILER, "|/usr/lib/sendmail -oi -t") || die;
ddbitch: open(MAILER, "|/usr/lib/sendmail -oi -t") || die;
demoroniser: open($if, "<$ARGV[0]") || die("Cannot open input file $ARGV[0]: $!\n");
demoroniser: open($of, ">$ARGV[1]") || die("Cannot open output file $ARGV[1]: $!\n");
dfbitch: open(EXCEPT) || die "can't open $EXCEPT: $!";
dfs: open(MTAB, "/etc/mtab") || die "$0: can't open /etc/mtab: $!\n";
difftree: open (FILE, $file) || die "can't open $file: $!";
down: open(machines) || die "$0: $machines: $!\n";
errlogd: open(tail) || (do syslog("err","can't open \"$tail\": $!"), next);
errlogd: open(logger) ||(do syslog("err","\"$logger\" wouldn't open: $!"),last);
exif: open(IN, $ARGV[0]) || die "Please specify a filename.\n\ne.g. $0 myfile.jpg\n\nquitting";
faqpods: open(PROG, "$^X -S basepods |") || die "can't fork: $!";
ff: open (FINGER, "nfinger -v @ARGV |") || die;
files_all_zeros: open(my $fh, "<", $filename) || return 0;
forwmail: open(aliases) || die "$me: couldn't read $aliases: $!\n";
ftpget: &ftp'open($Host, $User, $Pass) || &fail;
ftpls: &ftp'open($Host, $User, $Pass) || &fail;
funsizes: open (TMP, ">$TMP.c") || die "can't open $TMP.c: $!";
gcos: open(passwd) || die "$0: can't open $passwd: $!\n";
getuent: open(USERS) || die "can't open $USERS: $!\n";
ggrab: open(ART, $art) || next;
h2ph: open(IN,"$file") || ((warn "Can't open $file: $!\n"),next);
h2ph: open(OUT,">$perlincl/$outfile") || die "Can't create $outfile: $!\n";
here: open(win,"(stty all > /dev/tty ) 2>&1 |") || die "can't run stty";
here: open(machines) || die "$me: can't open $machines: $!\n";
here: open(PIPE) || die "$me: can't popen \"$PIPE\": $!\n";
hostmenus: open(EQUIV) || die "can't open $EQUIV: $!";
hostmenus: open(MACHINES) || die "can't open $MACHINES: $!";
hostmenus: open(HOSTS) || die "can't open $HOSTS: $!";
hostmenus: open(NETWORKS) || die "can't open $NETWORKS: $!";
hrefedit: open(TMP, "> $tmpfile") || die("can't write $tmpfile: $!");
iabitch: open(M, "|/usr/lib/sendmail -oi -t") || die;
incpr: open(STDIN) || die "can't open $STDIN for STDIN";
into: open (INTO, "+$mode $into") || die "can't write $into: $!";
into: open (TMP, "> $tmp") || die "can't open $tmp for write: $!";
ircwho: &open2(IN, OUT, "$IRC -d wp$$") || die;
jcat: open ($JARGON, $JARGON) || die "can't open $JARGON: $!";
jcat: open ($IDX, $IDX) || die "can't open $IDX: $!";
jfort: open ($JARGON, $JARGON) || die "can't open $JARGON: $!";
jfort: open ($IDX, $IDX) || die "can't open $IDX: $!";
jlook: open ($JARGON, $JARGON) || die "can't open $JARGON: $!";
jlook: open ($IDX, $IDX) || die "can't open $IDX: $!";
juzgan: open(NPASSWD) || die "can't open $NPASSWD: $!";
juzgan: open(OPASSWD) || die "can't open $OPASSWD: $!";
keepalive: open(LOG, "|/usr/bin/logger -t $0") || return -1;
keepalive: open(LCK, ">$file") || return -1;
keepalive: open(PID, ">$PID_FILE") || return -1;
keepalive: open(MODULES, "</proc/modules") ||
keepalive: open(STDOUT, "+>/dev/$device") || do {
keepalive: open (STDOUT, "+>$tty") || do {
keepalive: open(STDIN, "+<&STDOUT") || do {
kill-runaway-operacleaner: open(PS, "ps x |") || die "cannot fork: $!";
killkill: open (KF, ">$name") || die "can't write $name: $!";
lexmorph: open(DF, $dictfile) || die "open $dictfile: $!";
llbitch: open(M, "|/usr/lib/sendmail -oi -t") || die;
lqi: open (TMP, ">$TMP") || die "can't write to $TMP: $!";
mail: open (TMP, ">$tmp") || die "can't create $tmp: $!";
makepatch: open (PATCH, ">$thepatch") || die ("$thepatch: $!\n");
makepatch: open (MAN, $man) || die ("$man: $!\n");
mfinger: open(ALI, "ali @ARGV|") || die "can't fork: $!";
mirror/chat2.pl: open($_PTY,"+>$pty") || next;
mirror/chat2.pl: open($_TTY,"+>$tty") || next;
mirror/mirror: open( VAL_FILE, $val_name ) ||
mirror/mirror: open( dirtmp, $dirtmp ) || die "Cannot open $dirtmp";
mirror/mirror: open( tmp, $temp ) || die "Cannot open $temp!";
mirror/mirror: open( part, ">$part" ) || die "Cannot create $part";
mirror/mirror: open( readme, ">$readme" ) || die "Cannot create $readme";
mkxali: open (ALL, "> $everybody.tmp") || die "can't write to $everybody.tmp: $!";
mkxali: open($host,">$D$host.tmp") ||
mkxali: open(hosts) || die "$me: couldn't open $hosts: $!\n";
mkxali: open(shells) || die "$program: couldn't open $shells: $!\n";
mox: open(OUTPUT, "| $Pager") || warn "Can't open | $Pager: $!";
mox: open(OUTPUT, "> -") || die "can't reopen STDOUT: $!";
mvids: open(FILE) || die "Can't open directions file \"$FILE\": $!\n";
mvids: open(PWD) || die "Can't open $PWD: $!\n";
mvids: open (NPWD, ">$NPWD") || die "Can't create $NPWD: $!\n";
mvids: open(GRP) || die "Can't open $GRP: $!\n";
mvids: open (NGRP, ">$NGRP") || die "Can't create $NGRP: $!\n";
mxperl: open(STDOUT, ">$tempname") || die "can't open $tempname: $!";
mxperl: open (TMPDB, ">/usr/tmp/MTG-Dbase.pl") || return;
mxperl: open(STDIN, "<&CLIENT") || die "can't dup client to stdin";
mxperl: open(STDOUT, ">&CLIENT") || die "can't dup client to stdout";
mxperl: open(STDIN, "<&SAVE_IN") || warn "can't restore STDIN";
mxperl: open(STDOUT, ">&SAVE_OUT") || warn "can't restore STDOUT";
nbbitch: open(M, "|/usr/lib/sendmail -oi -t") || die;
newsclip: open(ART,"$ng/$art") || next;
newsclip: open(LOG,"$NEWSLIB/history") || die "Can't open log: $!\n";
newsmut: open(STAMP, "> $STAMP") || die "can't write $STAMP: $!";
now-what: open(PROFILE) || "$0: can't read mh_profile $PROFILE: $!\n";
nsbitch: open(M, "|/usr/lib/sendmail -oi -t") || die;
nwhatnow: open(PROFILE) || "$0: can't read mh_profile $PROFILE: $!\n";
on.new: open(win,"(stty all > /dev/tty ) 2>&1 |") || die "can't run stty";
on.new: open(machines) || die "$me: can't open $machines: $!\n";
on.new: open(PIPE) || die "$me: can't popen \"$PIPE\": $!\n";
pb: open(FILE) || die "can't open $FILE: $!";
pb: open (MAIN, 'main.pl') || die "can't open main.pl: $!";
pb: open (MODULE, $file) || die "can't open $file: $!\n";
perl-vdb: open(FIFO, ">$fifo") || die "can't open $fifo: $!";
perlpoint: open(IDX, "> index.html") || die "can't open index.html: $!";
perlstyle-talk: open(IDX, "> slide-index.html") || die "can't open index.html: $!";
pflags: open(PROC_H) || die "can't open $PROC_H: $!";
pibitch: open(M, "|/usr/lib/sendmail -oi -t") || die;
pingmodem: open (MODEM, "+</dev/modem") || die "can't open /dev/modem: $!";
pjoin: open(FILE) || die "can't open $FILE: $!";
pjoin: open (MAIN, 'main.pl') || die "can't open main.pl: $!";
pjoin: open (MODULE, $file) || die "can't open $file: $!\n";
pjoin-: open(FILE) || die "can't open $FILE: $!";
pjoin-: open (MAIN, 'main.pl') || die "can't open main.pl: $!";
pjoin-: open(file) || die "can't open $file: $!\n";
pjoin-: open(file) || die "can't open $file: $!";
plum: open (::STDOUT, ">&FOLDER_DEMON") ||
plum: &open($file, "< " . $file) || return undef;
plum: open (STDIN, "< $ttyname") || die "can't open $ttyname: $!";
plum: open (STDOUT, "> $ttyname") || die "can't open $ttyname: $!";
plum: open (TTY, "+< $ttyname") || die "can't open $ttyname: $!";
plum: open(NEW, ">$new") || &die("can't creat $new: $!");
plum: open(FORM, ">$name") || die "can't create $name: $!";
plum-old: open (::STDOUT, ">&FOLDER_DEMON") ||
plum-old: &open($file, "< " . $file) || return undef;
plum-old: open (STDIN, "< $ttyname") || die "can't open $ttyname: $!";
plum-old: open (STDOUT, "> $ttyname") || die "can't open $ttyname: $!";
plum-old: open (TTY, "+< $ttyname") || die "can't open $ttyname: $!";
plum-old: open(NEW, ">$new") || &die("can't creat $new: $!");
plum-old: open(FORM, ">$name") || die "can't create $name: $!";
plum-v5: open (STDOUT, ">&FOLDER_DEMON") ||
plum-v5: &open($file, "< " . $file) || return undef;
plum-v5: open (STDIN, "< $ttyname") || die "can't open $ttyname: $!";
plum-v5: open (STDOUT, "> $ttyname") || die "can't open $ttyname: $!";
plum-v5: open (TTY, "+< $ttyname") || die "can't open $ttyname: $!";
plum-v5: open(NEW, ">$new") || &die("can't creat $new: $!");
plum-v5: open(FORM, ">$name") || die "can't create $name: $!";
plum.v4: open (STDOUT, ">&FOLDER_DEMON") ||
plum.v4: &open($file, "< " . $file) || return undef;
plum.v4: open (STDIN, "< $ttyname") || die "can't open $ttyname: $!";
plum.v4: open (STDOUT, "> $ttyname") || die "can't open $ttyname: $!";
plum.v4: open (TTY, "+< $ttyname") || die "can't open $ttyname: $!";
plum.v4: open(NEW, ">$new") || &die("can't creat $new: $!");
plum.v4: open(FORM, ">$name") || die "can't create $name: $!";
plumlib/commit_deletions.pl: open(NEW, ">$new") || &die("can't creat $new: $!");
plumlib/x: open (STDOUT, ">&FOLDER_DEMON") ||
plumlib/x: &open($file, "< " . $file) || return undef;
plumlib/x: open (STDIN, "< $ttyname") || die "can't open $ttyname: $!";
plumlib/x: open (STDOUT, "> $ttyname") || die "can't open $ttyname: $!";
plumlib/x: open (TTY, "+< $ttyname") || die "can't open $ttyname: $!";
plumlib/x: open(NEW, ">$new") || &die("can't creat $new: $!");
plumlib/x: open(FORM, ">$name") || die "can't create $name: $!";
pod2man: open(F, "< $ARGV[0]") || die "can't open $ARGV[0]: $!";
popnewsdir: open(STACK, ">$rnstack") || die "can't write $rnstack: $!";
post-fcc: open (file, "<$file") || die "can't read $file, argv was $0 @ARGV: $!";
post-fcc: open (tmp, ">$tmp") || die "can't write $tmp, argv was $0 @ARGV: $!";
preambulate: open(file) || die "can't open $file: $!";
preambulate: open (TMP, ">$TMP") || die "can't create $TMP: $!";
psgrep: open(PS, "ps wwaxl |") || die "cannot fork: $!";
psplit: open (FILE, ">$FILE") || die "can't create $FILE: $!";
pstruct.old: open(TMP, ">$tmp.c") || die "can't write $tmp.c: $!";
pt: open(PS, "$ps |") || die "can't fork: $!";
pushnewsdir: open(STACK, ">$rnstack") || die "can't write $rnstack: $!";
pwbitch: open(PIPE) || die "$0: couldn't open $PIPE: $!\n";
qchk: open(OUT, "> over-quoted") || die "over-quoted: $!";
qcpan: open(OUTPUT, "| $Pager") || warn "Can't open | $Pager: $!";
qcpan: open(OUTPUT, "> -") || die "can't reopen STDOUT: $!";
randline: open(F, "< $file\0") || die "can't open $file: $!";
randlines: open(F, "< $file\0") || die "can't open $file: $!";
rfbitch: open(MAILER, "|/usr/lib/sendmail -oi -t") || die;
rfposted: open(MSG, "< $file" ) || die "can't open $file: $!";
rmquiet: open(STDIN, "/dev/null") || die "can't reopen stdin to /dev/null: $!"
shflpod: open(F, "< $podfile") || die "Can't open $podfile : $!\n";
shflpod: open(F, "> $podfile") || die "Can't open $podfile for writing: $!";
shflpod: open(F, "> $temporary") || do { warn "Can't open $temporary : $!\n"; return };
shmkill: open(ipcs,'ipcs -m|') || die "Can't run ipcs: $!";
sigbitch: open(M, "|/usr/lib/sendmail -oi -t") || die;
sigplan: open (FIFO, "> $FIFO") || die "can't write $FIFO: $!";
sigplan: open (SIGS,$sigfile) || die "can't open $sigfile";
sigplan: open(ART) || return $SIGS;
sigrand: open (SEMA, ">$SEMA") || die "can't write $SEMA: $!";
sigrand: open (FIFO, "> $FIFO") || die "can't write $FIFO: $!";
sigrand: open (SIGS,$sigfile) || die "can't open $sigfile";
sigrand: (rand(1.0) > ($GLOBRAND) && open ART) || return $SIGS;
sitepods: open(PROG, "$^X -S modpods |") || die "can't fork: $!";
skill: defined($kid_pid = open(PS, "$ps |")) || die "can't run ps: $!";
snice: defined($kid_pid = open(PS, "$ps |")) || die "can't run ps: $!";
sox: open(NETSTAT, "$netstat -Aa |") || die "cannot fork $netstat: $!";
sox: open(LSOF, "$lsof -sn |") || die "cannot fork $lsof: $!";
spam: open(MSG, "< $msg") || die "can't open $msg: $!";
spam: open(TWITS, ">> $twitlist") || die "can't append to $twitlist: $!\n";
splitpod: open (POD, "> $name.pod") || die "can't open $name.pod: $!";
ssl: open(passwd) || die "$program: can't open $passwd: $!\n";
starfest: open (TMP, ">$TMP") || die "$program: can't open $TMP for output: $!";
starfest: open(TMP) || die "can't reopen $TMP: $!";
starfest: open (DEAD, ">$DEAD") || die "can't open $DEAD: $!";
statmon: open(MACHINES) || die "can't open $MACHINES: $!";
stdpods: open(PROG, "$^X -S modpods |") || die "can't fork: $!";
suidscript: open(DF,"/etc/mount|") || die "Can't run /etc/mount";
suidscript: open(C,">.tmp$$.c") || die "Can't write C program for $_";
tgent: open (FILE) || die "can't open $FILE: $!";
tgent: open(STDOUT, ">&CHILD") || die "can't dup child to stdout: $!";
tip: open(TIPRC, "> $tiprc") || die "can't create $tiprc: $!";
trail: open (FH) || die "can't open $FH: $!";
uft: open(F, $file) || die "can't open $file: $!";
ug: open(my $fh, $mode_in, $unistd) || die "can't open $mode_in '$unistd': $!";
ug: open(STDOUT, "| $ENV{PAGER} ") || die "can't open STDOUT to $ENV{PAGER} pipe: $!";
ungeek: open(STDIN,$_) || die ("unable to open '$f'\n");
unigrep: open(my $fh, $mode_in, $unistd) || die "can't open $mode_in '$unistd': $!";
unigrep: open(STDOUT, "| $ENV{PAGER} ") || die "can't open STDOUT to $ENV{PAGER} pipe: $!";
unwho: open(UTMP,'+</etc/utmp') || die "can't open utmp: $!";
user: open (DATAFILE, "$ZCATCMD $DATAFILE|") || die "Can't zcat $DATAFILE";
user: open (PONG, "/usr/etc/pong $host 10 |") || &alert ("pong: $!");
uumerge: open(DECO,"|uudecode") || die "Can't pipe into uudecode\n";
uumerge: open(FIRST,"<$ARGV[0]") || die "Can't open $ARGV[0] for input\n";
uumerge: open(FIRST,"<$ARGV[0]") || die "Can't open $ARGV[0] for input\n";
uumerge: open(CURR,"<$ARGV[$curr]") || die "Can't open $ARGV[$curr]\n";
uumerge: open(CURR,"<$ARGV[$curr]") || die "Can't open $ARGV[$curr]\n";
vdb: open(FIFO, ">$fifo") || die "can't open $fifo: $!";
vdb: open(STDOUT, ">$tty") || die "can't open $tty: $!";
vdb: open(STDERR, ">$tty") || die "can't open $tty: $!";
vdb: open(STDIN, "<$tty") || die "can't open $tty: $!";
vdb: open(TTY, "+> $tty") || die "no /dev/tty: $!";
vdb: open (FIFO, $fifo) || die "can't open $fifo: $!";
vdb: open(CSRC, "> $cfile.c") || die "can't open $cfile.c: $!";
vspell: open(WORDS) || die "can't open $WORDS $!";
vspell: open (PAGER, "| ". ($PAGER = $ENV{'PAGER'} || 'more') . " -f");
w: open (PIPE) || die "$0: can't open $PIPE: $!\n";
w: $PIPE = "/usr/ucb/w " . join(' ', @ARGV) . "|"; open(PIPE) || die "$0: can't open $PIPE: $!\n";
whatis: (open PAGE) || die ("$program: can't open $PAGE to check filters: $!\n");
whatnow: open(PROFILE) || "$0: can't read mh_profile $PROFILE: $!\n";
whenon: open (LASTLOG, "< /usr/adm/lastlog") || die "can't open /usr/adm/lastlog: $!";
wotcgram: open(F, "< $file\0") || die "can't open $file: $!";
wrapman: open(IN,$file) || next;
wwwgrab: open(OUT,">".$savefilename) || die "$0: Fatal error. Cannot create $savefilename.\n";
xfortune: open (TMP, ">$TMP") || die "can't write $TMP: $!";
xpost: open(HIST) || die "$0: couldn't open $HIST: $!\n";
zap: defined($kid_pid = open(PS, "$ps |")) || die "can't run ps: $!";
Thread Previous
|
Thread Next