Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Ongelma Irssi-skriptissä (Perl)

Sivun loppuun

Matso [17.03.2007 00:56:52]

#

Irssi::command_bind tulosta => sub {
	open(KAHVA,'http://tosi.gurut.be/~tongle/filu.txt') || die('Ei onnistunu filun avaamine!');
	@rivit = <KAHVA>;
	close(KAHVA);
	print @rivit;
};

Ladattaessa skriptiä tulee tällasta virhettä:

00:51 -!- Irssi: Error in script botti:
00:51 Global symbol "@rivit" requires explicit package name at (eval 369) line
          15.
00:51 Global symbol "@rivit" requires explicit package name at (eval 369) line
          17.

:/

arcatan [18.03.2007 08:23:03]

#

Muokkaa kolmatta riviä näin:

my @rivit = <KAHVA>;

Joku Perl-osaaja voikin sitten kertoa miksi tuo my tarvitaan tuonne, minä en osaa Perliä.

Matso [20.03.2007 20:16:09]

#

Olis vielä toinen ongelma:

thread failed to start: Can't call method "command" on an undefined value at (eval 224) line 32.

Eli 32 rivi on toi: $server->command("/msg #kanava ".$rivi);
Tarkotus olis lähettää viesti kanavalle.

sub run {
	my ($server);
	my $filu = '/home/tongle/public_html/filu.txt';
	open(KAHVA,$filu) || die('Tiedoston avaaminen epäonnistui!');
	my @rivit = <KAHVA>;
	close(KAHVA);

	if(@rivit != ""){
		#Jos tiedosto ei ole tyhjä, tulostetaan sen sisältö ja tyhjennetään se
		foreach my $rivi (@rivit){
			$rivi =~ s/\n//;

                        ###### MITEN SAAN TÄN TOIMIMAAN? ######
			$server->command("/msg #kanava ".$rivi);
                        #######################################
		}
		open(KAHVA,">$filu") || die('Tiedoston avaaminen epäonnistui!');
		print KAHVA '';
		close(KAHVA);
	}
}

arcatan [21.03.2007 09:37:45]

#

Oletan, että tämä run on bindattu johonkin komentoon, tyyliin Irssi::command_bind('komento', 'run');. Irssin dokumentaation perusteella muuta kolmatta riviä näin:

	my ($data, $server, $witem) = @_;

Tämä siis lukee runille annetut parametrit muuttujiin. $datassa on komennolle annetut parametrit (/komento jotain, jotain on parametri), $server on luonnollisesti aktiivinen palvelin ja $witem on aktiivisen ikkunan sisältö.

Matso [21.03.2007 14:25:05]

#

arcatan kirjoitti:

	my ($data, $server, $witem) = @_;

Tämä siis lukee runille annetut parametrit muuttujiin. $datassa on komennolle annetut parametrit (/komento jotain, jotain on parametri), $server on luonnollisesti aktiivinen palvelin ja $witem on aktiivisen ikkunan sisältö.

Ei se toimi vieläkään. Valittaa nyt tällasta:

thread failed to start: Can't call method "command" on an undefined value at (eval 47) line 32.

arcatan kirjoitti:

Oletan, että tämä run on bindattu johonkin komentoon, tyyliin Irssi::command_bind('komento', 'run');.

Itseasiassa yritän suorittaa tota threadistam joka on tällanen:

my $thread = threads->new(sub {
	while(1){
		sleep(5);
		run();
	}
});

M2tias [30.03.2007 02:37:23]

#

$server->command("/msg #kanava ".$rivi);
Ainakin aliaksen kanssa jätetään "/" pois eli
$server->command("msg #kanava ".$rivi);
mutta en minä perliä osaa >_>

Matso [31.03.2007 14:29:28]

#

M2tias kirjoitti:

$server->command("/msg #kanava ".$rivi);
Ainakin aliaksen kanssa jätetään "/" pois eli
$server->command("msg #kanava ".$rivi);
mutta en minä perliä osaa >_>

Ei sitä mircissä ainakaan ole haittaa.

M2tias [05.04.2007 13:26:38]

#

Eikös kyse ollut irssistä eikä mircistä O_o

Matso [13.04.2007 09:05:29]

#

En usko että siitä sen enempää haittaa irssissäkään ole. Kuhan vertasin vaan, tolla mircillä enemmän scriptejä tullut tehtyä...

A-P [13.04.2007 12:07:10]

#

arcatan kirjoitti:

Muokkaa kolmatta riviä näin:

my @rivit = <KAHVA>;

Joku Perl-osaaja voikin sitten kertoa miksi tuo my tarvitaan tuonne, minä en osaa Perliä.

Perlissä on vipu joka määrittelee täytyykö muuttujat esitellä vai ei.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta