use strict; sub win_fn { print "windows version of function\n" } sub nsk_fn { print "nsk version of function\n" } sub unix_fn { print "unix version of function\n" } sub xplatform_fn { if ($^O eq 'MSWin32') { return win_fn(); } elsif ($^O eq 'nonstop_kernel') { return nsk_fn(); } else { return unix_fn(); } } xplatform_fn(); #### use strict; my $OS_TYPE = $^O eq 'MSWin32' ? 'win' : ($^O eq 'nonstop_kernel' ? 'nsk' : 'unix'); sub win_fn { print "windows version of function\n" } sub nsk_fn { print "nsk version of function\n" } sub unix_fn { print "unix version of function\n" } my %xplat = ( 'win' => \&win_fn, 'nsk' => \&nsk_fn, 'unix' => \&unix_fn, ); sub xplatform_fn { return $xplat{$OS_TYPE}->() } xplatform_fn(); #### use strict; my $OS_TYPE = $^O eq 'MSWin32' ? 'win' : ($^O eq 'nonstop_kernel' ? 'nsk' : 'unix'); sub XPlat::win_fn { print "windows version of function\n" } sub XPlat::nsk_fn { print "nsk version of function\n" } sub XPlat::unix_fn { print "unix version of function\n" } sub xplatform_fn { return &{$XPlat::{$OS_TYPE."_fn"}} } xplatform_fn();