Re: REGEXP removing - il- - -b-f and - il- - - - f



So which is safer more ideal to use : || , or


Derek B. Smith
OhioHealth IT
UNIX / TSM / EDM Teams





"John W. Krahn"
<krahnj@xxxxxxxxx
> To
Perl Beginners <beginners@xxxxxxxx>
04/28/2005 07:55 cc
PM
Subject
Re: REGEXP removing - il- - -b-f
and - il- - - - f










Jay Savage wrote:
> On 4/27/05, John W. Krahn <krahnj@xxxxxxxxx> wrote:
>
>>Jay Savage wrote:
>>
>>> 4> open (V4, "samcmd v4 2>\&1 |" ) || die "unable to open pipe...
>>>Broken?$!";
>>>
>>>Don't do this. the precedence of || is too high. your code attempts
>>>to open a pipe, and if it can't, then it attempts to open "die..." and
>>>starts throwing exceptions.
>>
>>No, that is NOT what happens, it will NEVER attempt to open "die..." with
or
>>without the parentheses. The ONLY time it will attempt to open "die..."
is if
>>there are no parentheses and the expression on the left hand side of the
||
>>operator evaluates to false.
>>
>>open V4, '0' || die $!;
>>
>>But even then it will NOT attempt to open "die..." because die() exits
the
>>program!
>
> Is stand corrected. There is no exception; I guess any time I've run
> into it, I've relied on whatever was opened, and died anyway. But I
> don't know what else to call opens behavior, except attempting to open
> die. Except in the case of parenthesis, as you noted, the behavior of
> open || die sure looks like this to me: open (X, badfile || die).
> The only difference between the two expressions below is the
> precedence of the operator.
>
> jsavage@ariadne:~> perl -e 'open FH, "< BAdFiLe" || die "$!"'
> jsavage@ariadne:~> perl -e 'open FH, "< BAdFiLe" or die "$!"'
> No such file or directory at -e line 1.
>
> Open may not technically be trying to open an expression and failing,
> I don't know. To be honest, I've never taken apart the source to see.
> But the appearance is certainly that that's what happens, and the
> result is so similar as to not matter. Especially consider the
> following:
>
> perl -e 'open FH, "< BAdFiLe" || die or die "$!"; print "didnt die\n"
'
> No such file or directory at -e line 1.
>
> Where did the first die go if || didn't attempt to pass it to open?
>
> if the reason for the failed open were the attempt to open "BAdFiLe",
> the first die would execute and the program would exit bore it got to
> the second. But clearly that's not what's happening. The first die
> is getting slurped up by ||, which is presumably trying to pass it on
> to open. When that fails, the second die executes, exiting with $!.
> at least that's what it looks like to me.
>
> So what's really happeneing here?

perldoc perlop

[snip]

C-style Logical Or

Binary "||" performs a short-circuit logical OR operation. That is,
if
^^^^^^^^^^^^^
the left operand is true, the right operand is not even evaluated.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Perhaps this will help illustrate:

$ perl -MO=Deparse,-p -e'open IN, "BADFILE" || die "ERROR: $!"'
open(IN, 'BADFILE');
-e syntax OK
$ perl -MO=Deparse,-p -e'open IN, "BADFILE" || die or die "ERROR: $!"'
(open(IN, 'BADFILE') or die("ERROR: $!"));
-e syntax OK

Because the string "BADFILE" is true, which is determined at compile time,
it
is as if "|| die" did not exist at all!

Of course if the file name is in a variable then it must be evaluated at
run time:

$ perl -MO=Deparse,-p -e'open IN, $ARGV[0] || die "ERROR: $!"' BADFILE
open(IN, ($ARGV[0] || die("ERROR: $!")));
-e syntax OK
$ perl -MO=Deparse,-p -e'open IN, $ARGV[0] || die or die "ERROR: $!"'
BADFILE
(open(IN, ($ARGV[0] || die)) or die("ERROR: $!"));
-e syntax OK

Where "|| die" will only be evaluated if the variable is false (undef, 0,
'0'
or '').



John
--
use Perl;
program
fulfillment

--
To unsubscribe, e-mail: beginners-unsubscribe@xxxxxxxx
For additional commands, e-mail: beginners-help@xxxxxxxx
<http://learn.perl.org/> <http://learn.perl.org/first-response>




.



Relevant Pages

  • Re: REGEXP removing - il- - -b-f and - il- - - - f
    ... >> starts throwing exceptions. ... don't know what else to call opens behavior, ... precedence of the operator. ... the first die would execute and the program would exit bore it got to ...
    (perl.beginners)
  • Re: Using excel through vbscript
    ... > Set wkbk = oxl.activeworkbook ... >> format the text file into different col. ... >> If I open file the way you told me It simply opens the text file but it does ... >>> The correct syntax would be ...
    (microsoft.public.excel.programming)
  • Re: Function and Syntax problems
    ... The reason the syntax is in the format it is, ... On the form's Open or Load event ... What I need is when the accompanying form opens have the ID field on ...
    (microsoft.public.access.forms)
  • Re: Function and Syntax problems
    ... The reason the syntax is in the format it is, ... What I need is when the accompanying form opens have the ID field on the ... Why do you have 'acNormal' in the OpenArgs parameter in your OpenForm calls? ...
    (microsoft.public.access.forms)
  • Re: Open Form
    ... > I am trying to get into my code an expression syntax that when the from ... > opens it clears the form for new data to be entered. ... > doCmd.OpenForm stDocName,,, stLinkCriteria at the end of this ...
    (microsoft.public.access.gettingstarted)