Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: including modules during runtime and dealing with OS specific (constants) code block

by DrHyde (Prior)
on Aug 02, 2011 at 10:56 UTC ( #918011=note: print w/ replies, xml ) Need Help??


in reply to including modules during runtime and dealing with OS specific (constants) code block

In general, you're better off using Devel::CheckOS instead of looking directly at $^O.

Second, I recommend putting all your platform-specific code into platform-specific modules. So, for example ...

use Devel::CheckOS qw(os_is); if(os_is('MSWin32')) { eval 'use MyApplication::Platform::Win32'; } elsif(os_is('MacOSX')) { eval 'use MyApplication::Platform::MacOSX'; } else { warn "not MSWin32 or MacOSX, falling back to defaults\n"; eval 'use MyApplication::Platform::Default'; }
Your MyApplication::Platform::* modules should then export the same set of subroutines that wrap up the platform-spceific bits, so that the core of your application is exactly the same no matter what platform. For example, they could all export a subroutine check_dir_is_writeable, whose Windows implementation would look like:
use Win32::File; use Win32::FileSecurity; sub check_dir_is_writeable { my $http_rec_localdir = shift; my $attrib; Win32::File::GetAttributes($http_rec_localdir, $attrib); if ($attrib & (Win32::File::SYSTEM | Win32::File::HIDDEN)) ... }
and whose Mac OS X implementation is:
sub check_dir_is_writeable { -d $_ && -w $_ && -x $_ }
Your application then can just do this to have it work on either platform:
if(check_dir_is_writeable($dir)) { # yay! } else { # ohnoes! }


Comment on Re: including modules during runtime and dealing with OS specific (constants) code block
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://918011]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (12)
As of 2014-11-26 18:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (172 votes), past polls