Re: Good Perl book?
by neilwatson (Priest) on Feb 10, 2017 at 14:54 UTC
|
| [reply] [Watch: Dir/Any] |
Re: Good Perl book?
by Athanasius (Archbishop) on Feb 10, 2017 at 15:35 UTC
|
I second the recommendation by nysus. In fact, I learned Perl from the Camel Book,1 which, despite being a reference work, is fun to read (in the early chapters).
I also made (and still make) extensive use of the free documentation at http://perldoc.perl.org/. Work through perlintro and the various tutorials (especially perldsc), familiarise yourself with the FAQs, and study perlsyn, perlref, and perlre. When I’m coding, I have this Perl documentation open in a browser window at all times.
The Perl Cookbook is now rather dated, but it’s still useful as a guide to well-written Perl code.
1Programming Perl by Tom Christiansen, brian d foy & Larry Wall with Jon Orwant, currently in its 4th Edition (2012).
Hope that helps,
| [reply] [Watch: Dir/Any] |
|
Regarding perldocs, they are like impossible for newbs to understand and even intermediate users like me tend to avoid them and do a google search instead. It's a bad habit to get into, though, as perldocs make it really easy to look things up fast if you get familiar with them. This is something I try to work on.
| [reply] [Watch: Dir/Any] |
Re: Good Perl book?
by haukex (Archbishop) on Feb 10, 2017 at 15:35 UTC
|
| [reply] [Watch: Dir/Any] |
Re: Good Perl book?
by nysus (Parson) on Feb 10, 2017 at 15:23 UTC
|
Oh, and as far as books go, get the Camel book. It's a little hard to slog through but it is authoritative and no nonsense. It's an essential reference.
As I recall, Learning Perl is also very good and easier to digest.
| [reply] [Watch: Dir/Any] |
Re: Good Perl book?
by nysus (Parson) on Feb 10, 2017 at 15:01 UTC
|
I can't tell you what works for you but I can tell you my experience as you sound kind of like me who uses Perl for the fun of it. I look at it as a kind of fun puzzle to figure out and I get great joy writing programs as bad as they often are. I've programmed in short spurts over many years when the Perl bug strikes.
Anyway, my advice is to start from scratch, at least until you get reacclimated. Perl has a lot of little gotchas and essential idioms you should know and you aren't likely to remember them. I've "relearned" Perl several times. Each time it gets easier. But I always found I got a deeper and deeper understanding of the language.
I also highly recommend checking out Moose, a framework that makes it exceedingly easy to write OO code in Perl. It has made my experience with Perl very pleasurable and fun. I really enjoy programming with it. I only started using it last year thanks to PerlMonks who tipped me off about it. Wish I knew about it long ago.
Good luck and happy programming.
| [reply] [Watch: Dir/Any] |
Re: Good Perl book?
by Anonymous Monk on Feb 10, 2017 at 14:58 UTC
|
| [reply] [Watch: Dir/Any] |
|
| [reply] [Watch: Dir/Any] |
|
| [reply] [Watch: Dir/Any] |
Re: Good Perl book?
by Anonymous Monk on Feb 10, 2017 at 15:56 UTC
|
Hi all
Thank you for your responses. I just tried the following. Took me a few searches, I also happened to get the brackets wrong for the array....used [ instead of (... and then went "heck, [ is for anonymous arrays..." hahaha. The map and grep took google searches to get it flowing back.
C:\>more first.pl
#use warnings;
#use strict;
my @arr = (1..10);
foreach my $num (@arr) {
print "Index is: $num. Value is: $arr[$num] ";
}
#Another way
print "\nWith a C like for loop\n";
for($num = 0; $num<= $#arr;$num++) {
print "Index is: $num. Value is: $arr[$num] ";
}
my @divbytwo = map { $_ / 2} @arr;
print "\n\@divbytwo = @divbytwo\n";
my @divbytwoo = grep { $_ % 2 == 0} @arr;
print "\@divbytwoo = @divbytwoo\n";
C:\>perl first.pl
Index is: 1. Value is: 2 Index is: 2. Value is: 3 Index is: 3. Value i
+s: 4 Index is: 4. Value is: 5 Index is: 5. Value is: 6 Index is: 6. V
+alue is: 7 Index is: 7. Value i
s: 8 Index is: 8. Value is: 9 Index is: 9. Value is: 10 Index is: 10.
+Value is:
With a C like for loop
Index is: 0. Value is: 1 Index is: 1. Value is: 2 Index is: 2. Value i
+s: 3 Index is: 3. Value is: 4 Index is: 4. Value is: 5 Index is: 5. V
+alue is: 6 Index is: 6. Value i
s: 7 Index is: 7. Value is: 8 Index is: 8. Value is: 9 Index is: 9. Va
+lue is: 10
@divbytwo = 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
@divbytwoo = 2 4 6 8 10
I think I better start from scratch :) | [reply] [Watch: Dir/Any] [d/l] |
|
Use of uninitialized value in concatenation (.) or string at first.pl
+line 5.
The problem loop is:
foreach my $num (@arr) {
print "Index is: $num. Value is: $arr[$num] ";
}
and as the output shows, the loop value is always one greater than the index. That’s because arrays in Perl (as in C) are subscripted starting from zero, so $arr[1] is actually the second element. The loop is easily fixed:
foreach my $num (@arr) {
print "Index is: $num. Value is: $arr[$num - 1] "; # Subtra
+ct 1 from the index
}
Also un-comment use strict, and you’ll see that the only error message pertains to this line:
for($num = 0; $num<= $#arr;$num++) {
Declare $num as a lexical variable:
for (my $num = 0; ...
and strict is happy.
Hope that helps,
| [reply] [Watch: Dir/Any] [d/l] [select] |
|
Thank you for your patience and guidance. It was stupid of me to comment it out. Perl and perlmonks are awesome. Respect.
| [reply] [Watch: Dir/Any] |