Re: Smart assignment

2006-10-03 Thread Bryan R Harris


 Jen Spinney wrote:
 On 10/2/06, Mumia W. [EMAIL PROTECTED] wrote:
 
 Yes, and here is another way:
 
 $ptype = (($ptypeline =~ /movable.+(sine|geo|radial|ortho)/i)[0]) ||
 '(missing)';
 
 How does that way work?  I was curious, so I tested it myself and it
 clearly did work, but I have no idea why.  Shouldn't the || operator
 turn the entire right side into a condional expression that evaluates
 to either 1 or 0?
 
 In scalar context the expression:
 
 $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i
 
 returns true or false (1 or '') and in list context it returns the
 contents of any capturing parentheses in the pattern.
 
 The expression:
 
 ( $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i )[ 0 ]
 
 is a list slice so the regular expression is in list context but the slice is
 a single value so the expression is a scalar.
 
 The || operator will only work with scalar values, not with lists, so this
 works because the list has been converted to a scalar with the list slice.


Thanks, John, Rob, and Mumia.  Rob's answer was fast and got me going,
Mumia's answer was more elegant (in my opinion), and John's answer helped me
understand why my code didn't work.

Much appreciated!

- Bryan

 



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/ http://learn.perl.org/first-response




Re: Smart assignment

2006-10-03 Thread Derek B. Smith

 returns true or false (1 or '') and in list
 context it returns the
 contents of any capturing parentheses in the
 pattern.
 
 The expression:
 
 ( $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i
 )[ 0 ]
 
 is a list slice so the regular expression is in list
 context but the slice is
 a single value so the expression is a scalar.
 
 The || operator will only work with scalar values,
 not with lists, so this
 works because the list has been converted to a
 scalar with the list slice.
 
 
 
 
 John


the list context represents everything between the / /
and the slice context represents [ 0 ] which is
assigned as a scalar to $ptypeline.

Correct?

thx
derek

__
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/ http://learn.perl.org/first-response




Re: Smart assignment

2006-10-03 Thread Bryan R Harris


 returns true or false (1 or '') and in list context it returns the
 contents of any capturing parentheses in the pattern.
 
 The expression:
 
 ( $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i
 )[ 0 ]
 
 is a list slice so the regular expression is in list context but the slice is
 a single value so the expression is a scalar.
 
 The || operator will only work with scalar values, not with lists, so this
 works because the list has been converted to a scalar with the list slice.
 
 John
 
 
 the list context represents everything between the / /
 and the slice context represents [ 0 ] which is
 assigned as a scalar to $ptypeline.
 
 Correct?


Any time you surround something with parenthesis () it is considered list
context, i.e.

Scalar context:   $a = $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i;

In scalar context, perl is trying to assign a scalar to $a.  In scalar
context that expression returns a 1 or 0 depending on whether it was able to
find that regular expression inside of $ptypeline.  (Or if I had a /gi at
the end it would return the number of matches it found).

List context:  @a = ($ptypeline =~ /movable.+(sine|geo|radial|ortho)/i);

This is list context, meaning that perl is trying to get a list out of that
expression.  In list context, that expression returns whatever items it
found in sets of parenthesis -- in this case, if ptypeline had ortho, @a
would be (ortho).

I'm learning...

- B



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/ http://learn.perl.org/first-response




Re: Smart assignment

2006-10-03 Thread John W. Krahn
Bryan R Harris wrote:
 
returns true or false (1 or '') and in list context it returns the
contents of any capturing parentheses in the pattern.

The expression:

( $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i
)[ 0 ]

is a list slice so the regular expression is in list context but the slice is
a single value so the expression is a scalar.

The || operator will only work with scalar values, not with lists, so this
works because the list has been converted to a scalar with the list slice.

John

the list context represents everything between the / /
and the slice context represents [ 0 ] which is
assigned as a scalar to $ptypeline.

Correct?
 
 
 Any time you surround something with parenthesis () it is considered list
 context, i.e.
 
 Scalar context:   $a = $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i;
 
 In scalar context, perl is trying to assign a scalar to $a.  In scalar
 context that expression returns a 1 or 0 depending on whether it was able to
 find that regular expression inside of $ptypeline.  (Or if I had a /gi at
 the end it would return the number of matches it found).
 
 List context:  @a = ($ptypeline =~ /movable.+(sine|geo|radial|ortho)/i);
 
 This is list context, meaning that perl is trying to get a list out of that
 expression.  In list context, that expression returns whatever items it
 found in sets of parenthesis -- in this case, if ptypeline had ortho, @a
 would be (ortho).

No.  It is list context because @a = forces list context.  In other words:

@a = ( $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i );

and:

@a = $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i;

are both in list context, the parentheses are superfluous.  However in:

$a = $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i;

the expression is in scalar context because $a = forces scalar context.
Even if you add parentheses:

$a = ( $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i );

it is still in scalar context, while:

( $a ) = $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i;

is in list context because $a is now part of a list.




John
-- 
Perl isn't a toolbox, but a small machine shop where you can special-order
certain sorts of tools at low cost and in short order.   -- Larry Wall

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/ http://learn.perl.org/first-response




Re: Smart assignment

2006-10-03 Thread Bryan R Harris

 Bryan R Harris wrote:
 
 returns true or false (1 or '') and in list context it returns the
 contents of any capturing parentheses in the pattern.
 
 The expression:
 
 ( $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i
 )[ 0 ]
 
 is a list slice so the regular expression is in list context but the slice
 is
 a single value so the expression is a scalar.
 
 The || operator will only work with scalar values, not with lists, so this
 works because the list has been converted to a scalar with the list slice.
 
 John
 
 the list context represents everything between the / /
 and the slice context represents [ 0 ] which is
 assigned as a scalar to $ptypeline.
 
 Correct?
 
 
 Any time you surround something with parenthesis () it is considered list
 context, i.e.
 
 Scalar context:   $a = $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i;
 
 In scalar context, perl is trying to assign a scalar to $a.  In scalar
 context that expression returns a 1 or 0 depending on whether it was able to
 find that regular expression inside of $ptypeline.  (Or if I had a /gi at
 the end it would return the number of matches it found).
 
 List context:  @a = ($ptypeline =~ /movable.+(sine|geo|radial|ortho)/i);
 
 This is list context, meaning that perl is trying to get a list out of that
 expression.  In list context, that expression returns whatever items it
 found in sets of parenthesis -- in this case, if ptypeline had ortho, @a
 would be (ortho).
 
 No.  It is list context because @a = forces list context.  In other words:
 
 @a = ( $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i );
 
 and:
 
 @a = $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i;
 
 are both in list context, the parentheses are superfluous.  However in:
 
 $a = $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i;
 
 the expression is in scalar context because $a = forces scalar context.
 Even if you add parentheses:
 
 $a = ( $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i );
 
 it is still in scalar context, while:
 
 ( $a ) = $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i;
 
 is in list context because $a is now part of a list.


Umm...  So would this do what I want also?

($ptype)=($projection =~ /movable.+(sine|geo|radial|ortho)/i)
  or $ptype=(missing);

It seems to...

- B




-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/ http://learn.perl.org/first-response




Re: Smart assignment

2006-10-03 Thread Igor Sutton


Umm...  So would this do what I want also?

($ptype)=($projection =~ /movable.+(sine|geo|radial|ortho)/i)
  or $ptype=(missing);



I think the correct is:

$ptype = ($projection =~ /movable.+(sine|geo|radial|ortho)/i) ||
(missing);

'||' will be tight with ( $projection =~ ... ) because it has higher
precedence than 'or'. The way you wrote it will assign (missing) to
$ptype, then $ptype's value to $ptype again. It works but not the way you
think.

Maybe someone could correct me :-) ?

--
Igor Sutton Lopes [EMAIL PROTECTED]


Re: Smart assignment

2006-10-03 Thread Mumia W.

On 10/03/2006 11:37 AM, Derek B. Smith wrote:

returns true or false (1 or '') and in list
context it returns the
contents of any capturing parentheses in the
pattern.

The expression:

( $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i
)[ 0 ]

is a list slice so the regular expression is in list
context but the slice is
a single value so the expression is a scalar.

The || operator will only work with scalar values,
not with lists, so this
works because the list has been converted to a
scalar with the list slice.




John



the list context represents everything between the / /
and the slice context represents [ 0 ] which is
assigned as a scalar to $ptypeline.

Correct?
[...]


No, $ptypeline is the string that is being searched.




--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/ http://learn.perl.org/first-response




Re: Smart assignment

2006-10-02 Thread Rob Dixon

Bryan R Harris wrote:


**
$ptypeline = #movableortProjortho0.0000.000;

($ptype) = ($ptypeline =~ /movable.+(sine|geo|radial|ortho)/i) || (missing);

print $ptype, \n;
**


The above code prints 1, where I want it to print ortho.  Is that
possible?

(Preferably in one line, since I'm a *big* fan of perl golf.  =)


$ptype = $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i ? $1 : (missing);

Rob

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/ http://learn.perl.org/first-response




Re: Smart assignment

2006-10-02 Thread Mumia W.

On 10/02/2006 01:54 PM, Rob Dixon wrote:

Bryan R Harris wrote:


**
$ptypeline = #movableortProjortho0.0000.000;

($ptype) = ($ptypeline =~ /movable.+(sine|geo|radial|ortho)/i) || 
(missing);


print $ptype, \n;
**


The above code prints 1, where I want it to print ortho.  Is that
possible?

(Preferably in one line, since I'm a *big* fan of perl golf.  =)


$ptype = $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i ? $1 : 
(missing);


Rob



Yes, and here is another way:

$ptype = (($ptypeline =~ /movable.+(sine|geo|radial|ortho)/i)[0]) || 
'(missing)';




--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/ http://learn.perl.org/first-response




Re: Smart assignment

2006-10-02 Thread Jen Spinney

On 10/2/06, Mumia W. [EMAIL PROTECTED] wrote:


On 10/02/2006 01:54 PM, Rob Dixon wrote:
 Bryan R Harris wrote:

 **
 $ptypeline = #movableortProjortho0.0000.000;

 ($ptype) = ($ptypeline =~ /movable.+(sine|geo|radial|ortho)/i) ||
 (missing);

 print $ptype, \n;
 **


 The above code prints 1, where I want it to print ortho.  Is that
 possible?

 (Preferably in one line, since I'm a *big* fan of perl golf.  =)

 $ptype = $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i ? $1 :
 (missing);

 Rob


Yes, and here is another way:

$ptype = (($ptypeline =~ /movable.+(sine|geo|radial|ortho)/i)[0]) ||
'(missing)';




How does that way work?  I was curious, so I tested it myself and it clearly
did work, but I have no idea why.  Shouldn't the || operator turn the entire
right side into a condional expression that evaluates to either 1 or 0?

- Jen


Re: Smart assignment

2006-10-02 Thread John W. Krahn
Jen Spinney wrote:
 On 10/2/06, Mumia W. [EMAIL PROTECTED] wrote:

 Yes, and here is another way:

 $ptype = (($ptypeline =~ /movable.+(sine|geo|radial|ortho)/i)[0]) ||
 '(missing)';
 
 How does that way work?  I was curious, so I tested it myself and it
 clearly did work, but I have no idea why.  Shouldn't the || operator
 turn the entire right side into a condional expression that evaluates
 to either 1 or 0?

In scalar context the expression:

$ptypeline =~ /movable.+(sine|geo|radial|ortho)/i

returns true or false (1 or '') and in list context it returns the
contents of any capturing parentheses in the pattern.

The expression:

( $ptypeline =~ /movable.+(sine|geo|radial|ortho)/i )[ 0 ]

is a list slice so the regular expression is in list context but the slice is
a single value so the expression is a scalar.

The || operator will only work with scalar values, not with lists, so this
works because the list has been converted to a scalar with the list slice.




John
-- 
Perl isn't a toolbox, but a small machine shop where you can special-order
certain sorts of tools at low cost and in short order.   -- Larry Wall

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/ http://learn.perl.org/first-response