Date: Sun, 24 Mar 2002 11:18:05 +0100 From: F.Xavier Noria <fxn@isoco.com> To: Илья Шипицин <ilia@chel.skbkontur.ru> Cc: questions@FreeBSD.ORG Subject: Re: Perl thing Message-ID: <20020324111805.2c05b3a6.fxn@isoco.com> In-Reply-To: <20020324112440.B97396-100000@sol.chel.skbkontur.ru> References: <20020324112440.B97396-100000@sol.chel.skbkontur.ru>
index | next in thread | previous in thread | raw e-mail
On Sun, 24 Mar 2002 11:26:25 +0500 (YEKT)
Илья Шипицин <ilia@chel.skbkontur.ru> wrote:
: is there anything that I could use it in perl program like I can write in
: C:
:
: #ifdef __FreeBSD__
:
: #endif
perl runs your script through the C preprocessor before its very
compilation with the option -P, for instance
print 'This is a ';
#if defined(__FreeBSD__)
print 'FreeBSD';
#elif defined(__linux__)
print 'Linux';
#elif defined(__sun)
print 'Sun';
#endif
print " box.\n"
gives this when executed with -P:
bash-2.05a$ perl -P foo.pl
This is a FreeBSD box.
This has its gotchas however, since some preprocessors see in "s/foo//;"
a C++-like comment. See the documentation in perldoc perlrun for them.
Another approach, more Perlish IMO, would be to check the name of the
operating system at runtime with $^O (that is a capital-oh):
bash-2.05a$ perl -le 'print $^O'
freebsd
and either write chains if-elsif-else, or factor out platform dependant
code in interfaces, implement them in corresponding modules and have a
driver that requires the correct code in runtime and eventually has
common code. This is what the standard module File::Spec does for
instance, he begins like this:
my %module = (MacOS => 'Mac',
MSWin32 => 'Win32',
os2 => 'OS2',
VMS => 'VMS',
epoc => 'Epoc');
my $module = $module{$^O} || 'Unix';
require "File/Spec/$module.pm";
as you see, what is platform dependant is defined in File::Spec::Unix,
File::Spec::Mac, and so on, and Spec.pm, which is the only module loaded
by users, requires behind the scenes the suitable implementation.
-- fxn
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020324111805.2c05b3a6.fxn>
