For Programmers: Free Programming Magazines  


Home > Archive > PERL Beginners > September 2004 > POSIX module









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author POSIX module
Errin Larsen

2004-09-30, 2:55 am

Hi Perlers,

I've seen a lot of tutorial or example code dealing with the POSIX
module that does something like this:

use POSIX ':sys_wait_h';

What does the ':' mean/do in the above line?

--Errin
Bob Showalter

2004-09-30, 2:55 am

Errin Larsen wrote:
> Hi Perlers,
>
> I've seen a lot of tutorial or example code dealing with the POSIX
> module that does something like this:
>
> use POSIX ':sys_wait_h';
>
> What does the ':' mean/do in the above line?


It's called a "tag" and is typically used to import a "basket" of symbols.

See "perldoc Exporter", under the heading "Specialised Import Lists"

For some reason this isn't documented in my copy of POSIX. But you can see
the symbols exported by running:

$ perl -MPOSIX -le 'print for @{$POSIX::EXPORT_TAGS{sys_wait_h}}'
WEXITSTATUS
WIFEXITED
WIFSIGNALED
WIFSTOPPED
WNOHANG
WSTOPSIG
WTERMSIG
WUNTRACED

(your system may show different values)
Jim

2004-09-30, 2:55 am


> Hi Perlers,
>
> I've seen a lot of tutorial or example code dealing with the
> POSIX module that does something like this:
>
> use POSIX ':sys_wait_h';
>
> What does the ':' mean/do in the above line?
>


Besides googling for it, try reading:
perldoc perlipc
perldoc perldoc -f waitpid
perldoc POSIX

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.770 / Virus Database: 517 - Release Date: 9/27/2004


Errin Larsen

2004-09-30, 2:55 am

On Wed, 29 Sep 2004 11:32:58 -0400, Jim <jkipp5@comcast.net> wrote:
>
>
>
>
> Besides googling for it, try reading:
> perldoc perlipc
> perldoc perldoc -f waitpid
> perldoc POSIX
>
> ---
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.770 / Virus Database: 517 - Release Date: 9/27/2004
>
>


Thank you Bob, and Jim

I have read about this. My question is more about the 'use' code then
about the POSIX module. It's just a really big module that has a lot
of these tags in it, it seems.

Here's my problem: When I use the following in my code, it runs and works fine:

use POSIX 'setsid';
use POSIX 'errno_h';
use POSIX ':sys_wait_h';

However, when I try to combine those into one line:

use POSIX qw/setsid errno_h :sys_wait_h/;

Then I get the following error:

# ismon.pl
":errno_h" is not exported by the POSIX module at
/usr/perl5/5.6.1/lib/sun4-solaris-64int/POSIX.pm line 19

":sys_wait_h" is not exported by the POSIX module at
/usr/perl5/5.6.1/lib/sun4-solaris-64int/POSIX.pm line 19

Can't continue after import errors at
/usr/perl5/5.6.1/lib/sun4-solaris-64int/POSIX.pm line 19
BEGIN failed--compilation aborted at ./ismon.pl line 3.

First of all, I'm not putting a ':' in front of 'errno_h' in my code,
but Perl seems to assume it's there ... why? Is there a difference
between the two implementations above that I'm not seeing?

--Errin
Bob Showalter

2004-09-30, 2:55 am

Errin Larsen wrote:
> When I use the following in my code, it runs and
> works fine:
>
> use POSIX 'setsid';
> use POSIX 'errno_h';
> use POSIX ':sys_wait_h';
>
> However, when I try to combine those into one line:
>
> use POSIX qw/setsid errno_h :sys_wait_h/;
>
> Then I get the following error:
>
> # ismon.pl
> ":errno_h" is not exported by the POSIX module at
> /usr/perl5/5.6.1/lib/sun4-solaris-64int/POSIX.pm line 19
>
> ":sys_wait_h" is not exported by the POSIX module at
> /usr/perl5/5.6.1/lib/sun4-solaris-64int/POSIX.pm line 19
>
> Can't continue after import errors at
> /usr/perl5/5.6.1/lib/sun4-solaris-64int/POSIX.pm line 19
> BEGIN failed--compilation aborted at ./ismon.pl line 3.
>
> First of all, I'm not putting a ':' in front of 'errno_h' in my code,
> but Perl seems to assume it's there ... why?


POSIX fixes up foo_h as :foo_h for some reason

> Is there a difference
> between the two implementations above that I'm not seeing?


Exporter only does the special :tag processing if the *first* entry in the
import list starts with one of the following characters

: ! /

So move :sys_wait_h to the front and it will work.
Errin Larsen

2004-09-30, 2:55 am

On Wed, 29 Sep 2004 12:27:03 -0400, Bob Showalter
<bob_showalter@taylorwhite.com> wrote:
> Errin Larsen wrote:

<< SNIP >>
[color=darkred]
>
> Exporter only does the special :tag processing if the *first* entry in the
> import list starts with one of the following characters
>
> : ! /
>
> So move :sys_wait_h to the front and it will work.
>


Thanks Bob, that did it.

I wonder why that is about Exporter? It seems rather counter-intuitive to me.

--Errin
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com