http://qs321.pair.com?node_id=11146047


in reply to Is it ever legitimate to override $^O ?

If it's not legitimate, how should I have written the test & code below?

use strict; use warnings; use Test::More; use FindBin qw( $RealBin ); use lib $RealBin; use MyModule; if (connected()) { pass("\"connected\" works with defaults ($^O)"); } else { plan skip_all => 'Internet inaccessible'; } my $careto = $^O; if ($careto =~ /win/gmsi) { $^O = 'linux'; } else { $^O = 'win'; } ok !connected(), "\"connected\" fails with defaults overwritten ($^O)" or diag("\"connected\" returns true regardless (OS = $^O)"); $^O = $careto; done_testing;

SSCCE (I hope!) from the module:

Package MyModule; use strict; use warnings; sub connected { my $pingcmd = 'ping -c 1 8.8.8.8'; my $pingworks = ' 0% packet loss'; if ($^O =~ /win/gmsi) { $pingcmd =~ s/-c/\/n/; $pingworks = 'bytes=32'; } my $pingrtn = qx($pingcmd); return $pingrtn =~ /$pingworks/msi; } 1;

I accept this may be an ugly hack, but it tests what I want in a way that seems obvious to me. But I will gladly accept improvements, advice and explanations.

Regards,

John Davies

Almost immediate update: deleted a couple of relic lines

Replies are listed 'Best First'.
Re^2: Is it ever legitimate to override $^O ?
by Anonymous Monk on Aug 09, 2022 at 10:19 UTC
    Heh
    sub connected_win32 { ... } sub connected_linux { ... }
    Poking at global vars is no api