eillihca@embezzle.StanFord.EDU ( Achille Hui, the Day Dreamer ) (01/15/91)
I have just compiled perl3.0@44 on our dept. machines and start to
write perl-scripts, then I encounter the following two problems:
1) consider the following pieces of codes:
if(open(pp,"|less")){
while($_ = <>){
printf(pp "%s",$_);
} close(pp);
}
If I pump a lot of data into <pp> and exit the program ( less in this
case ) before it exhausts all those data, the perl script simply die
prematurely... I discover when I try to close the pipe in the script
, perl will try to flush remaining data onto the pipe. If the other
end close the pipe first, a SIGPIPE will be generated.... Is it
more sensible that `` close '' will return will an indication of error
instead of simply bumping me out ???? Of course, I can avoid this by
sandwiching the while loop and the close statement with a signal
handler on SIGPIPE. But this is sort of gloss ... Is there more
elegant way to handle this ?
2) how to tell a given string is a valid regular expression or not ?
Basically, I want to get a regular expression $pattern from an
user and matches it with a fixed list of strings and do something
on them..
while($_ = shift(@strings)){
if ( $_ =~ /^$pattern/ ){
... doing something .....
}
}
However, if the user accidentally type in a malformed regular
expression, perl will kick me out again....
In general, is there a way to make perl ignore such ``fatal'' error ?
+--------------------------------+
+------------------------+ | eillihca@embezzle.StanFord.EDU |
| Achille Hui +--------------------| -01/15/91- |
| The Day Dreamer... | Dept. of Physics, +--------------------------------+
+---------------------| Stanford University. |
+-----------------------+