Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Re: Perl semi-object without a constructor

by Anonymous Monk
on Feb 20, 2013 at 14:35 UTC ( #1019834=note: print w/replies, xml ) Need Help??

in reply to Perl semi-object without a constructor

As far as I can see 'connect' *is* the constructor.

Whenever you see a construct that looks like Module->subroutine you should think "Class Method". The subroutine will be called with the Class name as the 1st parameter, and as expected it's used in a bless command.

Now that $conn is an object, all subroutines in it's class' (Msg) namespace and in the namespaces listed in Msg::ISA, can now be used as methods. Any such method will receive the blessed reference $conn implicitly as it's 1st parameter.

Replies are listed 'Best First'.
Re^2: Perl semi-object without a constructor
by Wiggins (Hermit) on Feb 20, 2013 at 20:14 UTC
    I went back and looked at all the subroutines.
    2 have $pkg as arg0 (event_loop() & new_server())
    7 have $conn as arg0
    3 don't take args
    1 starts with the line:
    shift unless ref($_[0]); # shift if first arg is package name

    So maybe the entire package is actually a class.

    With 1 dodgy routine:

    sub _new_client { my $sock = $main_socket->accept(); my $conn = bless { 'sock' => $sock, 'state' => 'connected' }, $g_pkg; #< different CLASSNAME my $rcvd_notification_proc = &$g_login_proc ($conn, $sock->peerhost(), $sock->peerport()); if ($rcvd_notification_proc) { $conn->{rcvd_notification_proc} = $rcvd_notification_proc; my $callback = sub {_rcv($conn,0)}; set_event_handler ($sock, "read" => $callback); } else { # Login failed $conn->disconnect(); } }

    It is always better to have seen your target for yourself, rather than depend upon someone else's description.

      Common Perl convention is that sub/method names beginning with an underscore are to be treated as private. The reason that sub _new_client is structured differently than the other subs in the package is because it's meant for internal use only and is not a part of the public interface.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1019834]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (6)
As of 2018-11-16 17:41 GMT
Find Nodes?
    Voting Booth?
    My code is most likely broken because:

    Results (200 votes). Check out past polls.

    • (Sep 10, 2018 at 18:53 UTC) Welcome new users!