http://qs1969.pair.com?node_id=1177153

skendric has asked for the wisdom of the Perl Monks concerning the following question:

I'm writing semi-portable code (Linux / Windows).

I use 'system' to execute an external binary ('tshark', part of the Wireshark collection).

I handle slashes like this:

use File::Which qw(which); $tshark_binary = which('tshark'); $tshark_binary =~ s/\\/\\\\/g if $tshark_binary =~ /\\/;

The last line functions essentially as a "If this is Windows, escape the slashes in the path name", such that 'C:/Program Files/Wireshark/tshark.EXE' turns into 'C://Program Files//Wireshark//tshark.EXE'.

And then, when I actually execute tshark, I use the following:

system("\"$tshark_binary\" -r $pcap -e frame.number -e frame.time_epo +ch -e ip.src -e ip.id -T text -T fields -E separator=, > $temp_file") +;

The key 'portability' change being the escaped quotes around $tshark_binary, which aren't necessary in Linux but are needed under Windows, to dodge the: "C:\Program" is not an executable errors.

This is fine, and it works. But is there a more elegant / common way to accomplish these two tasks?

--sk