How much has Perl code mover forward over the years? A lot, and not a lot. To some extend, programming languages are the eye of the storm of technology - and that's because people who invest in code want it to be good for many years, so the same tools are used for several generations of products, with perhaps incremental rather than complete changes.
I was minded of this when asked for a binary data handling demo on today's course, and I pulled up an ancient example called
ystwth.pl from the days we named examples after a theme, and the theme of the Perl course was rivers. You'll see what a big language Perl is when you realise I was getting pretty desparate to choose the Ystwyth at Aberystwyth (the main river there is the Rheidol, of course, but I digress).
Anyways - here's the new code ... a better Usage line, using the newer 3 parameter form of the
open function, and frankly much of the other change is me tidying up my own code. I have decided NOT to use
say because not everyone has upgraded to a Perl that supports in yet or at least hadn't in my group of trainees, and I'm not talking Perl 6 ... yet. But there's another story I have there, to write up in the morning.
# Checking whether files are in GIF format and if they are reporting image size
# Nice demo of a little bit of binary data handling
die ("Usage: $0 filename [filename [filename ....]]\n") unless @ARGV;
foreach $fn (@ARGV) {
if (open FH,"<",$fn) {
read (FH,$buffer,10);
($gifword,$giflevel,$x,$y)= unpack("a3a3vv",$buffer);
if ($gifword ne "GIF") {
print ("$fn is NOT a valid GIF file\n\n");
} else {
print ("$fn - GIF file - version $giflevel\n");
print ($x," pixels wide by ", $y," pixels high\n\n");
}
} else {
print "Failed to open file $fn - $!\n\n";
}
}
__END__
Sample output:
20-dynamic:bperl grahamellis$ perl bincopi
Usage: bincopi filename [filename [filename ....]]
20-dynamic:bperl grahamellis$ perl bincopi *.gif
copy.gif - GIF file - version 89a
72 pixels wide by 73 pixels high
20-dynamic:bperl grahamellis$ perl bincopi *.gif dfjsjkfdfs bincopi
copy.gif - GIF file - version 89a
72 pixels wide by 73 pixels high
Failed to open file dfjsjkfdfs - No such file or directory
bincopi is NOT a valid GIF file
20-dynamic:bperl grahamellis$
The new example is also
[here] on the web site.
(written 2011-06-10)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
P212 - Perl - More on Character Strings [453] Commenting Perl regular expressions - (2005-09-30)
[583] Remember to process blank lines - (2006-01-31)
[586] Perl Regular Expressions - finding the position and length of the match - (2006-02-02)
[597] Storing a regular expression in a perl variable - (2006-02-09)
[608] Don't expose your regular expressions - (2006-02-15)
[737] Coloured text in a terminal from Perl - (2006-05-29)
[928] C++ and Perl - why did they do it THAT way? - (2006-11-16)
[943] Matching within multiline strings, and ignoring case in regular expressions - (2006-11-25)
[1222] Perl, the substitute operator s - (2007-06-08)
[1230] Commenting a Perl Regular Expression - (2007-06-12)
[1251] Substitute operator / modifiers in Perl - (2007-06-28)
[1305] Regular expressions made easy - building from components - (2007-08-16)
[1336] Ignore case in Regular Expression - (2007-09-08)
[1510] Handling Binary data (.gif file example) in Perl - (2008-01-17)
[1727] Equality and looks like tests - Perl - (2008-07-29)
[1735] Finding words and work boundaries (MySQL, Perl, PHP) - (2008-08-03)
[1947] Perl substitute - the e modifier - (2008-12-16)
[2230] Running a piece of code is like drinking a pint of beer - (2009-06-11)
[2379] Making variables persistant, pretending a database is a variable and other Perl tricks - (2009-08-27)
[2657] Want to do a big batch edit? Nothing beats Perl! - (2010-03-01)
[2801] Binary data handling with unpack in Perl - (2010-06-10)
[2834] Teaching examples in Perl - third and final part - (2010-06-27)
[2874] Unpacking a Perl string into a list - (2010-07-16)
[2877] Further more advanced Perl examples - (2010-07-19)
[2993] Arrays v Lists - what is the difference, why use one or the other - (2010-10-10)
[3059] Object Orientation in an hour and other Perl Lectures - (2010-11-18)
[3100] Looking ahead and behind in Regular Expressions - double matching - (2010-12-23)
[3332] DNA to Amino Acid - a sample Perl script - (2011-06-24)
[3411] Single and double quotes strings in Perl - what is the difference? - (2011-08-30)
[3546] The difference between dot (a.k.a. full stop, period) and comma in Perl - (2011-12-09)
[3630] Serialsing and unserialising data for storage and transfer in Perl - (2012-02-28)
[3650] Possessive Regular Expression Matching - Perl, Objective C and some other languages - (2012-03-12)
[3707] Converting codons via Amino Acids to Proteins in Perl - (2012-04-25)
[3927] First match or all matches? Perl Regular Expressions - (2012-11-19)
[4452] Binary data handling - Python and Perl - (2015-03-09)
P050 - Perl - General [116] The next generation of programmer - (2004-11-13)
[400] New in the shops - (2005-08-01)
[743] How to debug a Perl program - (2006-06-04)
[1750] Glorious (?) 12th August - what a Pe(a)rl! - (2008-08-12)
[1897] Keeping on an even keel - (2008-11-21)
[2228] Where do I start when writing a program? - (2009-06-11)
[2242] So what is this thing called Perl that I keep harping on about? - (2009-06-15)
[2374] Lead characters on Perl variable names - (2009-08-24)
[2504] Learning to program in ... - (2009-11-15)
[2736] Perl Course FAQ - (2010-04-23)
[2783] The Perl Survey - (2010-05-27)
[2825] Perl course - is it tailored to Linux, or Microsoft Windows? - (2010-06-25)
[2971] Should the public sector compete with businesses? and other deep questions - (2010-09-26)
[3093] How many toilet rolls - hotel inventory and useage - (2010-12-18)
[3407] Perl - a quick reminder and revision. Test yourself! - (2011-08-26)
[3823] Know Python or PHP? Want to learn Perl too? - (2012-07-31)
[3902] Shell - Grep - Sed - Awk - Perl - Python - which to use when? - (2012-10-22)
[3911] How well do you know Perl and / or Python? - (2012-11-04)
[4296] Polishing the Perl courses - updated training - (2014-09-17)
[4301] Perl - still a very effective language indeed for extracting and reporting - (2014-09-20)
Some other Articles
Finding your big files in Perl - design considerations beyond the course environmentThe Olympic Torch, and Melksham HouseRabbit ShelterIs Melksham town centre dying?How much has Perl (and other languages) changed?Travelling aroundReading the nth line from a file (Perl and Tcl examples)Moving on - a task for the hotel staff!Summer Sunday Trains - outings from Swindon, Chippenham, Melksham, Trowbridge and WestburySelf Portrait (in words)