Thread Filehandle globalisieren: aus sub heraus (6 answers)
Opened by styx-cc at 2006-12-10 16:49

styx-cc
 2006-12-10 16:49
#72448 #72448
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Hallo, ich hab schon im Perl-Kochbuch und bei google.de geschaut, konnt aber so ncihts finden was mir weiterhiflt,
ich versuchen ein file Handle global zu machen, so klappt das wunderbar, aber in dem grossem Script nicht mehr:

Das klappt:
Code: (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
26
#!/usr/bin/perl
use strict;
use warnings;

my $LOG;

open_log();
bla();
close_log();

sub open_log {
my $logfile = 'logfile.txt';
open LOG, '>>', $logfile or die("Can't open logfile: $!\n");
$LOG = *LOG;
}
sub bla {
fill_log();
}

sub fill_log {
print $LOG "$_\n" for (1..100);
}

sub close_log {
close $LOG or die $!;
}


Das nicht:
Code: (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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/perl -w
use strict;

use IO::Socket::INET;
use Encode;

#login data
my $nick = 'stefan@berlin';
my $pw = '12345';
my $channel = '12345';
my $SPIN; #socket
my $LOG; #filehandle

main_connection("Versuche einzuloggen..");

#### SUBS ####
sub main_connection {
my $text = shift;
print "$text\n\n";
$SPIN = shake_hands();
login();
$LOG = open_log();
#main
#while socket, hold it
my $line;
while (defined($line = <$SPIN>)) {
start($line);
}
main_connection("Versuche neu einzuloggen..") unless($line);
}

sub shake_hands {
my $host = 'www.hostname.com';
my $port = '0000';
#open the socket to chatserver
my $SPIN = IO::Socket::INET->new(
#socketdaten
return $SPIN;
}

sub login {
#sending logindata to chatserver
#serverlogin
}

sub start ($) {
my $line = shift;
#get first char, cause it means a affair wich happening, like op, deop, join and so on
my $cmd = substr($line, 0,1);
print $LOG "test\n";
}

sub open_log {
my $logfile = 'logfile2.txt';
open LOG, '>>', $logfile or die("Can't open logfile: $!\n");
return *LOG;
}

sub close_log {close $LOG or die $!}


Ich versteh das nicht :(
Sieht einer von euch meinen Fehler?

MfG

Edit: Beim 2. laeuft das Script zwar ohne Fehler und Warnundgen, schreibt aber nichts in das File..\n\n

<!--EDIT|styx-cc|1165762533-->
Pörl.

View full thread Filehandle globalisieren: aus sub heraus