Thread variablen aus sub an andere sub übergeben (2 answers)
Opened by Mindfoo at 2009-04-06 04:27

Mindfoo
 2009-04-06 04:27
#120300 #120300
User since
2009-04-03
10 Artikel
BenutzerIn
[default_avatar]
Hallo!
Ich schreibe derzeit an nem irc-bot der verschiedene stats in den channel parsed.

Das script durchläuft eine schleife und wenn bestimmte dinge passieren wird per handler eine function getriggert an die dann 2 variablen übergeben werden:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
sub on_public {
    my ( $self, $event ) = @_;
    my ( $nick, $mynick ) = ( $event->nick, $self->nick );
    my ($channel) = ( $event->to )[0];
    my ($line) = ( $event->args );
    my ($arg)  = ( $event->args );
    $arg =~ /^(\S+)\s*(.*)$/;
    ( $arg, my $extarg ) = ( $1, $2 );
    if (   $line =~ /^!schreibwas/ ){
            output('blablub');
       }
}


Damit wird sowohl der channel, der eigene irc-nick und der nickname der person definiert die die on_public sub aufgerufen hat. ($nick,$mynick,$channel)
Ausserdem wird noch die chatline geprüft und bei einem bestimmten trigger eine sub aufgerufen.

Soweit so gut... Ich rufe also aus dieser sub eine andere subfunktion auf in der ich die selben variablen nutzen möchte:

Code (perl): (dl )
1
2
3
4
5
sub output {
        my $line = shift;
        my ($channel) = ( $event->to )[0];
        $self->privmsg( $channel, "$line" );
}


Wie gehe ich hier vor? Ich habs schon mit "our" probiert, aber da gibts folgenden error:
Variable "$event" is not imported at qlstats.pl line 604.
Variable "$self" is not imported at qlstats.pl line 606.
Variable "$self" is not imported at qlstats.pl line 608.
usw.

ein schmutziger workaround wär das pushen der vars in ein globales array das ich dann wieder abfrag, aber das is nich best practice oder? ;)

Danke schonmal :)

edit:
Ich habs gelöst, aber is das die feine englische?

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sub on_public {
    my ( $self, $event ) = @_;
    my ( $nick, $mynick ) = ( $event->nick, $self->nick );
    my ($channel) = ( $event->to )[0];
    my ($line) = ( $event->args );
    my ($arg)  = ( $event->args );
    $arg =~ /^(\S+)\s*(.*)$/;
    ( $arg, my $extarg ) = ( $1, $2 );
    if (   $line =~ /^!schreibwas/ ){
            output($self,$event,"blablub");
       }
}

sub output {
        my $self = shift;
        my $event = shift;
        my $line = shift;
        my $nick = ( $event->nick );
        my $channel = ( $event->to )[0];
        if($msgswitch eq 'public'){
                $self->privmsg( $channel, "$line" );
        } elsif($msgswitch eq 'query'){
                $self->privmsg( $nick, "$line" );
        }
}

Last edited: 2009-04-06 05:30:15 +0200 (CEST)

View full thread variablen aus sub an andere sub übergeben