Difference between list and arrays.

2014-09-16 Thread Uday Vernekar
Confusion on array and list. can anybody explain me the difference between
list and arrays.

my @xyz = ( 4, 5, 6 );

The right-hand side of the equals sign is a list.here I assign that list to
the variable @xyz.
its an array,list can be assigned to an array.

on similiar lines
we can assign Lists to hashes
my %zzz = ( a = 42, b = 43, b = 44 );




-- 
*
Don't ask them WHY they hurt you,
because all they'll tell you is lies and excuses.
 Just know they were wrong, and try to move on.
**


Suggestions - printing to ZEBRA credit card printer attached to Win7 PC

2014-09-16 Thread Gary Stainburn
I've got a ZEBRA ZXP Series 1 credit card printer attached to a Win7 PC.
By using Word and creating a paper size of 84mm by 54mm I can printer on a 
card successfully.

The cards we will be using are pre-printed with logo's etc. but I need to 
print a person's name and reference number across the botom of it.

The data is being generated by my LAPP based system. I'm looking at options as 
to how I can implement a system for printing the cards. As I see it, I have a 
number of options.

1) mail-merge using Word. 
Generate a CSV file via PHP for download.
Manual intervention required to download the file and run the mail-merge, but 
simple and easy to set up.

2) Have a process run on my LAPP server to create the document and print using 
a normal windows share.

3) Have a daemon running on the Win7 PC accepting instructions via the network 
and printing the cards. This then goes back to the earlier thread of which 
PERL to use.

4) Any other method you can suggest.

Obviously, options 2 and 3 are the ones I'd prefer. I've Googled perl Windows 
print and all I get are various postings, many of them over 10 years old on 
how to print text to PRN or a windows share.

There are posts about generating HTML/CSS and using rundll32 to print it. 
Google on windows html css print doesn't give much help. Does anyone know 
how I would be able to get it to print to 84CMx54CM page?

If I don't go down the HTML/CSS route, what other options are available for 
producing the document suitable for sending to the printer.

Going back 20 years to when I used to write in Borland Delphi there was a 
component for creating printer documents and adding contents. Are there 
similar PERL modules? What are people's preferences?

-- 
Gary Stainburn

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/




Re: Difference between list and arrays.

2014-09-16 Thread Andy Bach
On Tue, Sep 16, 2014 at 4:22 AM, Uday Vernekar vernekaru...@gmail.com
wrote:

 Confusion on array and list. can anybody explain me the difference between
 list and arrays.

 my @xyz = ( 4, 5, 6 );

 The right-hand side of the equals sign is a list.here I assign that list
 to the variable @xyz.
 its an array,list can be assigned to an array.

 on similiar lines
 we can assign Lists to hashes
 my %zzz = ( a = 42, b = 43, b = 44 );



Not sure exactly what your confusion is, you are correct. Couple notes, one
is, the hash assigned list uses the super comma (=) which is actually
just a fancy comma; it quotes the left hand side for you, so:
( a = 42, b = 43, b = 44 );

is the same as (note, 2nd and 3rd keys were b which'd overwrite the 43
w/ 44 so I made it a c:
( a, 42, b, 43, c, 44 );

That is, the hash assignment just requires (well, Perl will assign undef
if you're short a value and complain if you've warnings set[1]) an even
number of elements; key, value, pairs.  You can do:
my @uvw = ( a = 42, b = 43, b = 44 );

and end up w/ 6 elements (in order) in the array.  The other thing to think
about is context - the LHS of the assigning = determines how the RHS
list is treated. In scalar context
my $one_var = (1, 2, 3);

the list returns its element count (as does an array - for hashes, it's
similar but you get a fraction: # of elements/buckets [2]) so
$one_var == 3;

In list context, you get assignment, as you see above or:
my ($one_var) = (1,2,3);

Here, the first element on the RHS gets assigned to the first member of the
LHS, i.e.
$one_var == 1;

The rest get thrown away.  If the LHS has an array, it gets everything
else, if there's too many LHS scalars, they get assigned undef.
-- 

a

[1]
# perl -we 'my %h = (b = 3, a); print $h{a}\n;'
Unquoted string a may clash with future reserved word at -e line 1.
Odd number of elements in hash assignment at -e line 1.
Use of uninitialized value in concatenation (.) or string at -e line 1.

[2]
http://stackoverflow.com/questions/7427381/what-do-you-get-if-you-evaluate-a-hash-in-scalar-context


Andy Bach,
afb...@gmail.com
608 658-1890 cell
608 261-5738 wk


Re: Difference between list and arrays.

2014-09-16 Thread Paul Johnson
On Tue, Sep 16, 2014 at 12:12:05PM -0500, Andy Bach wrote:

The other thing to think
 about is context - the LHS of the assigning = determines how the RHS
 list is treated.

So far, so good.  Well, almost ...

  In scalar context
 my $one_var = (1, 2, 3);
 
 the list returns its element count

But, I'm afraid, this is a common misconception.  The fact is that there
is no such thing as a list in scalar context.

So what, then, is the construct above?

You were correct in saying that it (whatever it is) is evaluated in
scalar context.  In scalar context, the parentheses () are used simply
for precedence.  The commas are operators.

The comma operator evaluates its LHS, throws it away, evaluates its RHS
and returns that.  The comma operator is left associative (see perlop).

So the result of evaluating the RHS (1, 2, 3) is:

  (1, 2, 3) - ((1, 2), 3) - (2, 3) - 3

And this is why $one_var gets the value 3 - not because there are three
elements in a list on the RHS.

This all becomes easier to understand if you don't use the values 1, 2
and 3 :)

See also perldoc -q 'difference between a list and an array'

-- 
Paul Johnson - p...@pjcj.net
http://www.pjcj.net

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/




Re: Difference between list and arrays.

2014-09-16 Thread Andy Bach
On Tue, Sep 16, 2014 at 1:45 PM, Paul Johnson p...@pjcj.net wrote:

 The comma operator evaluates its LHS, throws it away, evaluates its RHS
 and returns that.  The comma operator is left associative (see perlop).

 So the result of evaluating the RHS (1, 2, 3) is:

   (1, 2, 3) - ((1, 2), 3) - (2, 3) - 3

 And this is why $one_var gets the value 3 - not because there are three
 elements in a list on the RHS.


D'oh! Somewhere I knew something like that, that a list in scalar context
ends up assigning the last element to the scalar - though I'm pretty sure I
didn't know it was due to the comma operator.  I should have though, as:
# perl -we 'my $one = (3,2,1); print $one\n'
Useless use of a constant in void context at -e line 1.
Useless use of a constant in void context at -e line 1.
1

Those two warnings are the dropping of the result of the first to comma
operations.  Hmm, so this works [1]:

my $second_elem = ('first', 'second', 'third')[1];
$second_elem eq 'second';

because ...???

 This all becomes easier to understand if you don't use the values 1, 2
and 3 :)

I knew that was a bad idea ... just not enough to not use it.
$ perldoc -q 'difference between a list and an array'
...
As a side note, there’s no such thing as a list in *scalar context*.  When
you say

   $scalar = (2, 5, 7, 9);

   you’re using the comma operator in *scalar context*, so it uses the
scalar comma operator.  There never was a list there at all!  This causes
the last value to be returned: 9.

Well, I would've found that if perldoc would've found this for queries on
scalar context, list context, array context or, for that matter,
plain old context but ..


-- 

a

[1]
perl -we 'my $s_e = (x, y, z)[1]; print $s_e\n'

same as:
perl -we 'my $s_e = qw(x y z)[1]; print $s_e\n'

and:
perl -we 'my ($s_e) = qw(x y z)[1]; print $s_e\n'



Andy Bach,
afb...@gmail.com
608 658-1890 cell
608 261-5738 wk


Re: Difference between list and arrays.

2014-09-16 Thread Paul Johnson
On Tue, Sep 16, 2014 at 02:43:28PM -0500, Andy Bach wrote:
 On Tue, Sep 16, 2014 at 1:45 PM, Paul Johnson p...@pjcj.net wrote:
 
  The comma operator evaluates its LHS, throws it away, evaluates its RHS
  and returns that.  The comma operator is left associative (see perlop).
 
  So the result of evaluating the RHS (1, 2, 3) is:
 
(1, 2, 3) - ((1, 2), 3) - (2, 3) - 3
 
  And this is why $one_var gets the value 3 - not because there are three
  elements in a list on the RHS.
 
 
 D'oh! Somewhere I knew something like that, that a list in scalar context
 ends up assigning the last element to the scalar - though I'm pretty sure I
 didn't know it was due to the comma operator.  I should have though, as:
 # perl -we 'my $one = (3,2,1); print $one\n'
 Useless use of a constant in void context at -e line 1.
 Useless use of a constant in void context at -e line 1.
 1
 
 Those two warnings are the dropping of the result of the first to comma
 operations.  Hmm, so this works [1]:
 
 my $second_elem = ('first', 'second', 'third')[1];
 $second_elem eq 'second';
 
 because ...???

Aha, turning it up a notch ;-)

In this case, ('first', 'second', 'third') is actually a list.  Why?
Because the [1] indexes into it.  The [1] forces it into list context.
You can't index into something that is in scalar context.

 $ perldoc -q 'difference between a list and an array'

 Well, I would've found that if perldoc would've found this for queries on
 scalar context, list context, array context or, for that matter,
 plain old context but ..

Yes, I think the search is only on the title of the section, not its
contents.  Which can mean that you need to find what you are looking for
in order to know how to find it.

-- 
Paul Johnson - p...@pjcj.net
http://www.pjcj.net

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/




Argument isn't numeric warning in if statement

2014-09-16 Thread SSC_perl
I just ran across something puzzling.  Why are these two statements not 
equivalent when it comes to warnings?

if ($item-{'optionprice'}) {
$item-{'unitprice'} += $item-{'optionprice'};
}

and

$item-{'unitprice'} += $item-{'optionprice'} if ($item-{'optionprice'});

Given the following values:

$item-{'unitprice'}   = '12.16';
$item-{'optionprice'} = '';

the 2nd statement returns an Argument '' isn't numeric in addition (+) 
warning, while the 1st one doesn't.  I thought I read where Peal reads a 
statement like the 2nd one from right to left.  It looks like it doesn't, since 
$item-{'optionprice'} is evaluated in spite of the 'if'.  Am I mistaken?

Perl 5.10.1

Thanks,
Frank

SurfShop shopping cart is now open source...

http://www.surfshopcart.com/
Setting up shop has never been easier!

Follow us on GitHub!
https://github.com/surfshopcart/surfshop


--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/




Re: Argument isn't numeric warning in if statement

2014-09-16 Thread sisyphus1
-Original Message- 
From: SSC_perl

Sent: Wednesday, September 17, 2014 10:37 AM
To: Perl Beginners
Subject: Argument isn't numeric warning in if statement

I just ran across something puzzling.  Why are these two statements not 
equivalent when it comes to warnings?


if ($item-{'optionprice'}) {
$item-{'unitprice'} += $item-{'optionprice'};
}

and

$item-{'unitprice'} += $item-{'optionprice'} if 
($item-{'optionprice'});


Given the following values:

$item-{'unitprice'}   = '12.16';
$item-{'optionprice'} = '';


the 2nd statement returns an Argument '' isn't numeric in addition (+) 
warning, while the 1st one doesn't.  I thought I read where Peal reads a 
statement like the 2nd one from right to left.  It looks like it doesn't, 
since $item-{'optionprice'} is evaluated in spite of the 'if'.  Am I 
mistaken?


Perl 5.10.1


Can't reproduce the anomaly here on 5.10.0 and 5.12.0 - I don't have 5.10.1.

##
C:\_32\pscrpttype try.pl

use warnings;

$item-{'unitprice'}   = '12.16';
$item-{'optionprice'} = '';
$item-{'unitprice'} += $item-{'optionprice'} if ($item-{'optionprice'});

C:\_32\pscrptperl try.pl

C:\_32\pscrpt
##

Are you sure you've quoted the code (that's producing the warning) correctly 
?


Cheers,
Rob



--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/




Regular expression: option match after a greedy/non-greedy match

2014-09-16 Thread Viet-Duc Le

p{margin:0;padding:0;}


Greeting from S. Korea ! 

I am parsing the output of ffmpeg with perl. Particular, I want to print only 
these lines among the output and capturing the resolution, i.e. 1280x720. 


Stream #0:0: Video: h264 (High), yuv420p, 1280x720, SAR 1:1 DAR 16:9, 23.98 
fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Stream #0:1(jpn): Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s (default)
Stream #0:2(eng): Subtitle: ass (default) 
.


My code is following: 
# INFO is pipe to ffmpeg 
# Here, the print $1 $2 $3 $4\n is for debugging .  
while ( INFO ) { 
if ( regular expression  ) { 
print $1 $2 $3 $4\n; 
}
}
Desirable outputs: 
- Video 1280 720 
 Audio 
 Subtitle 

Regarding the regular expession: 
1. /Stream #\d:\d.*(Video|Audio|Subtitle).*(\d+)x(\d+)/ (greedy)
- Video 0 720 
Q: why does $2 give  0? I remember .* match backward starting from the end of 
the string. Then it should be  Video 1280 720 as output.

2. /Stream #\d:\d.*(Video|Audio|Subtitle).*?(\d+)x(\d+)/ (non greedy) 
- Video 1280 720 
Q: I can understand this, but again I think (1) should work too. 

3. /Stream #\d:\d.*(Video|Audio|Subtitle).*?(?:(\d+)x(\d+))?/ ( non-capturing 
optional group ) 
- Video 
Audio 
Subtitle 
Q: It seems that the resolution part is ignored because it is optional. 
Otherwise, the output will contains Video only as (1) and (2). How can I 
circumvent this ? 

4. /Stream #\d:\d.*(Video|Audio|Subtitle).+?(?:(\d+)x(\d+))?.*?$/ 
- Video 
 Audio 
 Subtitle 
Q: I tried to match things after the resolution, hoping that it will be 
captured. 

5. /Stream #\d:\d.*(Video|Audio|Subtitle).+?(?:(\d+)x(\d+))?(.*?)$/ ( let's 
capture the last part) 
- Videoh264 (High), yuv420p, 1280x720, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 
tbr, 1k tbn, 47.95 tbc (default)
Audioac3, 48000 Hz, stereo, fltp, 192 kb/s (default)
Subtitleass (default)
Q: Now $2 and $3 is undef, and the rest of the string went to $4. Again, I am 
quite puzzled by the output. 

Please pardon my long email. I hope someone can point out the flaws in my 
logic. Here, I can match and print Video/Audio/Subtitle separately. 
But I wish for one expression to match them all, one expression to print them. 


Best regards, 

Viet-Duc





Re: Regular expression: option match after a greedy/non-greedy match

2014-09-16 Thread Jing Yu
Hi Viet-Duc Le,
On 17 Sep 2014, at 10:23, Viet-Duc Le leviet...@kaist.ac.kr wrote:

 Greeting from S. Korea ! 
 
 I am parsing the output of ffmpeg with perl. Particular, I want to print only 
 these lines among the output and capturing the resolution, i.e. 1280x720. 
 
 Stream #0:0: Video: h264 (High), yuv420p, 1280x720, SAR 1:1 DAR 16:9, 23.98 
 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
 Stream #0:1(jpn): Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s (default)
 Stream #0:2(eng): Subtitle: ass (default) 
 .
 
 My code is following: 
 # INFO is pipe to ffmpeg 
 # Here, the print $1 $2 $3 $4\n is for debugging .  
 while ( INFO ) { 
 if ( regular expression  ) { 
 print $1 $2 $3 $4\n; 
 }
 }
 
 Desirable outputs: 
 - Video 1280 720 
  Audio 
  Subtitle 
 
 Regarding the regular expession: 
 1. /Stream #\d:\d.*(Video|Audio|Subtitle).*(\d+)x(\d+)/ (greedy)
 - Video 0 720 
 Q: why does $2 give  0? I remember .* match backward starting from the end of 
 the string. Then it should be  Video 1280 720 as output.
that '0' is from 128'0', since the '.*' consumes 128. What it does under the 
hood is .* first will reach to the end of the target string, and then backtract 
according to the following regex. Once the whole regex is satisfied, it will 
stop backtracting, although further retracting will possibly also satisfy the 
regex.
 
 2. /Stream #\d:\d.*(Video|Audio|Subtitle).*?(\d+)x(\d+)/ (non greedy) 
 - Video 1280 720 
 Q: I can understand this, but again I think (1) should work too. 
 
 3. /Stream #\d:\d.*(Video|Audio|Subtitle).*?(?:(\d+)x(\d+))?/ ( non-capturing 
 optional group ) 
 - Video 
 Audio 
 Subtitle 
 Q: It seems that the resolution part is ignored because it is optional. 
 Otherwise, the output will contains Video only as (1) and (2). How can I 
 circumvent this ? 
that ?: prevents $ variables to capture the matching regex group. I guess you 
can get rid of it. The trailing ? already tells the regex group to match 
optionally. It is equivalent to {0,1}. The big problem coming with it is the 
middle .*?. Since the last part is optional, .*? will just match the least 
number of char possible, which is nothing.
 
 4. /Stream #\d:\d.*(Video|Audio|Subtitle).+?(?:(\d+)x(\d+))?.*?$/ 
 - Video 
  Audio 
  Subtitle 
 Q: I tried to match things after the resolution, hoping that it will be 
 captured. 

Again the ?: prevents it being captured. .+? in the middle is better, now it 
matches ':'.
 
 5. /Stream #\d:\d.*(Video|Audio|Subtitle).+?(?:(\d+)x(\d+))?(.*?)$/ ( let's 
 capture the last part) 
 - Videoh264 (High), yuv420p, 1280x720, SAR 1:1 DAR 16:9, 23.98 fps, 
 23.98 tbr, 1k tbn, 47.95 tbc (default)
 Audioac3, 48000 Hz, stereo, fltp, 192 kb/s (default)
 Subtitleass (default)
 Q: Now $2 and $3 is undef, and the rest of the string went to $4. Again, I am 
 quite puzzled by the output. 
If it is optional, it is non greedy. So everything goes to the (.*?)$.
 
 Please pardon my long email. I hope someone can point out the flaws in my 
 logic. Here, I can match and print Video/Audio/Subtitle separately. 
 But I wish for one expression to match them all, one expression to print 
 them. 
 
In general, it is a better practise to add 'x' to your regex to make it more 
readable. My regex might not be the best, but it works as expected.

use strict;
use warnings;
use 5.16.0;

while(DATA){
/ (Video|Audio|Subtitle)  (?: (?:.) +? (\d+x\d+) || (?:.)+ ) /x
and say $1, $2, $3, $4;
}


__DATA__
Stream #0:0: Video: h264 (High), yuv420p, 1280x720, SAR 1:1 DAR 16:9, 23.98 
fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Stream #0:1(jpn): Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s (default)
Stream #0:2(eng): Subtitle: ass (default)

The '||' operator will first check the group before it. It will only look at 
the other group if the first group fails. This puts your resolution group 
matching as priority, but not necessity.

Hope this helps.
Jing