Re: Smart assignment
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
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
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
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
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
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
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
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
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
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
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