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