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)
21e8
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
P050 - Perl - General [3911] How well do you know Perl and / or Python? - (2012-11-04)
[3902] Shell - Grep - Sed - Awk - Perl - Python - which to use when? - (2012-10-22)
[3823] Know Python or PHP? Want to learn Perl too? - (2012-07-31)
[3407] Perl - a quick reminder and revision. Test yourself! - (2011-08-26)
[3332] DNA to Amino Acid - a sample Perl script - (2011-06-24)
[3093] How many toilet rolls - hotel inventory and useage - (2010-12-18)
[2971] Should the public sector compete with businesses? and other deep questions - (2010-09-26)
[2825] Perl course - is it tailored to Linux, or Microsoft Windows? - (2010-06-25)
[2783] The Perl Survey - (2010-05-27)
[2736] Perl Course FAQ - (2010-04-23)
[2504] Learning to program in ... - (2009-11-15)
[2374] Lead characters on Perl variable names - (2009-08-24)
[2242] So what is this thing called Perl that I keep harping on about? - (2009-06-15)
[2228] Where do I start when writing a program? - (2009-06-11)
[1897] Keeping on an even keel - (2008-11-21)
[1750] Glorious (?) 12th August - what a Pe(a)rl! - (2008-08-12)
[743] How to debug a Perl program - (2006-06-04)
[400] New in the shops - (2005-08-01)
[116] The next generation of programmer - (2004-11-13)
P212 - Perl - More on Character Strings [3927] First match or all matches? Perl Regular Expressions - (2012-11-19)
[3707] Converting codons via Amino Acids to Proteins in Perl - (2012-04-25)
[3650] Possessive Regular Expression Matching - Perl, Objective C and some other languages - (2012-03-12)
[3630] Serialsing and unserialising data for storage and transfer in Perl - (2012-02-28)
[3546] The difference between dot (a.k.a. full stop, period) and comma in Perl - (2011-12-09)
[3411] Single and double quotes strings in Perl - what is the difference? - (2011-08-30)
[3100] Looking ahead and behind in Regular Expressions - double matching - (2010-12-23)
[3059] Object Orientation in an hour and other Perl Lectures - (2010-11-18)
[2993] Arrays v Lists - what is the difference, why use one or the other - (2010-10-10)
[2877] Further more advanced Perl examples - (2010-07-19)
[2874] Unpacking a Perl string into a list - (2010-07-16)
[2834] Teaching examples in Perl - third and final part - (2010-06-27)
[2801] Binary data handling with unpack in Perl - (2010-06-10)
[2657] Want to do a big batch edit? Nothing beats Perl! - (2010-03-01)
[2379] Making variables persistant, pretending a database is a variable and other Perl tricks - (2009-08-27)
[2230] Running a piece of code is like drinking a pint of beer - (2009-06-11)
[1947] Perl substitute - the e modifier - (2008-12-16)
[1735] Finding words and work boundaries (MySQL, Perl, PHP) - (2008-08-03)
[1727] Equality and looks like tests - Perl - (2008-07-29)
[1510] Handling Binary data (.gif file example) in Perl - (2008-01-17)
[1336] Ignore case in Regular Expression - (2007-09-08)
[1305] Regular expressions made easy - building from components - (2007-08-16)
[1251] Substitute operator / modifiers in Perl - (2007-06-28)
[1230] Commenting a Perl Regular Expression - (2007-06-12)
[1222] Perl, the substitute operator s - (2007-06-08)
[943] Matching within multiline strings, and ignoring case in regular expressions - (2006-11-25)
[928] C++ and Perl - why did they do it THAT way? - (2006-11-16)
[737] Coloured text in a terminal from Perl - (2006-05-29)
[608] Don't expose your regular expressions - (2006-02-15)
[597] Storing a regular expression in a perl variable - (2006-02-09)
[586] Perl Regular Expressions - finding the position and length of the match - (2006-02-02)
[583] Remember to process blank lines - (2006-01-31)
[453] Commenting Perl regular expressions - (2005-09-30)
56f8
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)