Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
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 surveying the Monastery: (14)
As of 2015-07-29 18:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (267 votes), past polls