Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight

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.

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]
[marto]: 4, if they're good they#ll make it to 5 :P
[1nickt]: Mpph didn;t have twins bu I remember thinking that the "terrible twos" was a misnomer as age 4 seemed to be much more difficult.
LanX 4 kids and wanting to upgrade to 5? wow! ! !
[1nickt]: My lads are 15 and 31 now and both drive me just as crazy as when little, just less frequently.
[LanX]: ;p
[marto]: LanX I'd rather commit sudoku :P
[marto]: trench humour folks, feeling rough.
[marto]: there is never a night when they sleep all the way through, but last night was something else

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (10)
As of 2017-11-18 18:49 GMT
Find Nodes?
    Voting Booth?
    In order to be able to say "I know Perl", you must have:

    Results (277 votes). Check out past polls.