Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Perl semi-object without a constructor

by Anonymous Monk
on Feb 20, 2013 at 19: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.


Comment on Re: Perl semi-object without a constructor
Download Code
Re^2: Perl semi-object without a constructor
by Wiggins (Friar) 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?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (12)
As of 2015-07-02 11:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (34 votes), past polls