http://www.perlmonks.org?node_id=1001728


in reply to Re^2: How to have OS specific code sections in Perl
in thread How to have OS specific code sections in Perl

The problem is that the conditional block is only evaluated at run time, by which time it's too late for use if.

You want:

my $LINUX; BEGIN { $LINUX = ($^O eq 'linux') }; use if $LINUX, 'MIDI::ALSA' => ('SND_SEQ_EVENT_PORT_UNSUBSCRIBED', 'SN +D_SEQ_EVENT_SYSEX');

Or better:

use if ($^O eq 'linux'), 'MIDI::ALSA' => ('SND_SEQ_EVENT_PORT_UNSUBSCR +IBED', 'SND_SEQ_EVENT_SYSEX');
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'