Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
Handling binary data in Perl is easy!

Perl can handle binary data just as easily as ASCII text - but YOU - if you're the programmer - must understand the format of the data that you'll be working with. With binary data it's every bit as important to get the right bytes in the right places as it is to get the appropriate separators between fields and lines in an ASCII file ... indeed, it's perhaps more important as you can't check your output file by pulling it into a text editor.

How does it work?

• Binary data can be held in a Perl scalar as a string. Unlike char array base string functions in C, there is no special character that's reserved for the end of string so you have total flexibility.

• You can read any number of bytes that you wish from a file (binary of otherwise) using Perl's read function.

• You can unpack the buffer that you've read the data into a list of variables, using all sorts of differet formats - see
  perldoc -f pack
for details and there are all sorts of other resources such as [this one]

• you can reassemble a new binary string with pack from a list of scalars and

• you can output the binary string with print.

Surprisingly, it reall is that easy!

Here's an example ...

Reading a binary file:

  open (FH,"talker.gif") or die;
  read (FH,$buffer,-s "talker.gif");
  close FH;


Getting data out of the binary file (you MUST know the format!)

  ($magic, $subtype, $widf, $ight) = unpack("A3A3vv",$buffer);
  print "Image was $widf by $ight and is type $subtype or $magic\n";


And writing a binary file:

  open (FHO,">shouter.gif") or die;
  print FHO $buffer;
  close FHO;


If you want to read and write your file through random access, you can uses seek - there's an example [here] on our website and another [here]. There's also a function called tell which tells you where you are in the file. Personally, I don't recommend its use - you should know where you are if your coding to a high standard, and it's one of the few things we don't have an example of on the site.

With binary files, you'll sometimes find that you require several programs to access them at the same time, and you can use the flock function to (cooperatively) lock them - there's an example of that [here]. And you can do clever things with sysread to read without buffering ... and sysread has "friends" such as syswrite and sysseek but - good on the Perl team - no systell. Example - [here].


Illustrattion - delegate on one of last week's Perl courses. Click on image to enlarge.
(written 2011-08-30)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
P602 - Perl - Advanced File and Directory Handling
  [839] Reporting on the 10 largest files or 10 top scores - (2006-08-20)
  [975] Answering ALL the delegate's Perl questions - (2006-12-09)
  [1225] Perl - functions for directory handling - (2007-06-09)
  [1709] There is more that one way - Perl - (2008-07-14)
  [1832] Processing all files in a directory - Perl - (2008-10-11)
  [1861] Reactive (dynamic) formatting in Perl - (2008-10-31)
  [2876] Different perl examples - some corners I rarely explore - (2010-07-18)
  [3429] Searching through all the files in or below a directory - Ruby, Tcl, Perl - (2011-09-09)

P223 - Perl - Interprocess Communication
  [604] Perl - multiprocess applications - (2006-02-13)
  [1918] Perl Socket Programming Examples - (2008-12-02)
  [2694] Multiple processes (forking) in Python - (2010-03-25)
  [2970] Perl - doing several things at the same time - (2010-09-25)
  [3010] Children, zombies, and reaping processes - (2010-10-23)
  [3011] What are .pid files? - (2010-10-23)
  [3940] Run other processes from within your Perl program - (2012-12-03)

P215 - Perl - More about Files
  [2405] But I am reading from a file - no need to prompt (Perl) - (2009-09-14)
  [2964] An introduction to file handling in programs - buffering, standard in and out, and file handles - (2010-09-21)
  [3320] Reading the nth line from a file (Perl and Tcl examples) - (2011-06-09)
  [3839] Spraying data from one incoming to series of outgoing files in Perl - (2012-08-15)


Back to
Single and double quotes strings in Perl - what is the difference?
Previous and next
or
Horse's mouth home
Forward to
If its Sunday, must it be Weymouth?
Some other Articles
Storing Tcl source code encoded, and running via your own C program
User defined sorting and other uses of callbacks in Tcl and Tk
Passing back multiple results in Tcl - upvar and uplevel
If its Sunday, must it be Weymouth?
Handling binary data in Perl is easy!
Single and double quotes strings in Perl - what is the difference?
A review of the Summer Sunday extra trains on the TransWilts line
When variables behave differently - Tie in Perl
Journey home by public transport for a Bank Holiday
Perl - a quick reminder and revision. Test yourself!
4759 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2024: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/3412_Han ... easy-.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb