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
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: portability / system / elegance (updated)
by haukex (Archbishop) on Dec 04, 2016 at 15:58 UTC | |
by Marshall (Canon) on Dec 05, 2016 at 00:13 UTC | |
Re: portability / system / elegance
by ikegami (Patriarch) on Dec 05, 2016 at 01:40 UTC | |
Re: portability / system / elegance
by ww (Archbishop) on Dec 04, 2016 at 14:03 UTC | |
by atcroft (Abbot) on Dec 04, 2016 at 15:59 UTC |