Perl $$ (double dollar) sign -- what does it dereference?

ealeon Source

I saw the question on Perl $$var -- two dollar signs as a sigil? and that double dollar sign is used to dereference

I have this perl code

sub sock_initialize {

    my $sock  = q{};
    my $port  = q{};

    # $name running
    my $max_count   = 250;
    my $timeout     = 5;
    my $max_retries = 36;

    # Get a port for our server.
    $sock = IO::Socket::INET->new(
        Listen    => SOMAXCONN,    # listen queue depth
        LocalPort => 0,
        Reuse     => 1
    );

    die "Unable to bind a port: $!" if !$sock;

    $port      = $sock->sockport();
    my $ip = inet_ntoa( scalar gethostbyname( $HOST ));
    my $uid = (getpwuid( $> ))[2];
    my $queue = join(":", $ip, $port, $$, $uid);

    print sprintf("started on port $port ($$), SOMAXCONN=%d\n", SOMAXCONN);

    return $sock;
} ## end sub sock_initialize

from the above code, what does double dollar sign dereferencing? my $queue = join(":", $ip, $port, $$, $uid);

perl

Answers

answered 3 months ago F. Hauri #1

Simply

Like under and other POSIX : $$ is current process id (PID)

For man perlvar:

  $PROCESS_ID
  $PID
  $$      The process number of the Perl running this script.  Though you can
          set this variable, doing so is generally discouraged, although it can
          be invaluable for some testing purposes.  It will be reset
          automatically across "fork()" calls.

Nota: from man perl

Reference Manual
        perlsyn             Perl syntax
        perldata            Perl data structures
        ...
        perldebug           Perl debugging
        perlvar             Perl predefined variables
        ...

And from man POSIX...

   "getpid"
          Returns the process identifier.  Identical to Perl's builtin
          variable $$, see "$PID" in perlvar.

comments powered by Disqus