Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

perl

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);

like image 280
ealeon Avatar asked Feb 13 '18 06:02

ealeon


1 Answers

Simply

Like under bash and other POSIX shell: $$ 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.
like image 188
F. Hauri Avatar answered Nov 15 '22 04:11

F. Hauri