Bonjour à tous,
dans mon programme perl j'utilise une interface Tk. Il y a une fenêtre principale contenant 3 objets "Text". Je mets à jour le contenu de ces fichiers grâce à la méthode "repeat". Un extrait de mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
 
	my $top = MainWindow()->Toplevel(-title => 'log');
	my $OIText = $top->Scrolled('Text', -scrollbars => 'se', -wrap => 'none', -width => 120, -height => 20);
	my $DataText = $top->Scrolled('Text', -scrollbars => 'se', -wrap => 'none', -width => 120, -height => 20);
	my $IOText = $top->Scrolled('Text', -scrollbars => 'se', -wrap => 'none', -width => 120, -height => 20);
 
	$OIText->pack(-fill => 'both');
	$DataText->pack(-fill => 'both');
	$IOText->pack(-fill => 'both');
	open(my $OIFH, "OIBufferFile");
	$OIText->repeat(50, sub {
		my @lines = <$OIFH>;
		if (scalar(@lines) > 0) {
			$OIText->insert('end', @lines);
			$OIText->see('end');
		}
	});
 
	open(my $DataFH, "DataBufferFile");
	$DataText->repeat(10, sub {
		my @lines = <$DataFH>;
		if (scalar(@lines) > 0) {
			$DataText->insert('end', @lines);
			$DataText->see('end');
		}
	});
 
	open(my $IOFH, "IOBufferFile");
	$IOText->repeat(100, sub {
		my @lines = <$IOFH>;
		if (scalar(@lines)) {
			$IOText->insert('end', @lines);
			$IOText->see('end');
		}
	});
Je souhaiterais réaliser des opérations plus complexes mais surtout qu'une seule fois. Par exemple si je reprends la première partie de mon code;

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
	$OIText->METHODE_EXECUTEE_UNE_FOIS( sub {
		open(my $OIFH, "OIBufferFile");
		while(my $line = <$OIFH>) {
			# je fais plein de trucs super compliqués:
			# code volumineux
			$OIText->insert('end', $line);
			$OIText->see('end');
		}
		close($OIFH);
	});
	# TRES IMPORTANT l'interprétation du code se poursuit
Après maintes recherches, je n'ai toujours pas trouvé la
Code : Sélectionner tout - Visualiser dans une fenêtre à part
METHODE_EXECUTEE_UNE_FOIS
qui comme vous l'aurez remarqué se comporte comme un .

Merci d'avance pour votre aide,

JD