Thread Problem mit Filehandle im END Block (8 answers)
Opened by PROXEN at 2014-08-04 20:23

Linuxer
 2014-08-04 21:36
#176710 #176710
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

kann ich so nicht nachvollziehen:

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
26
27
28
29
30
31
32
33
34
35
#! /usr/bin/env perl
use strict;
use warnings;


sub interrupt {
    warn "CTRL+C detected.\n";
    die;
}

sub ask_user {
    my $msg = shift;

    print $msg;
    chomp( my $input = <STDIN> || '' );
    return $input;
}


$SIG{INT} = \&interrupt;

open my $logh, '>', "/tmp/log.txt" or die "$!";
print $logh "Opened Logfile.\n";

while ( my $input = ask_user("Enter something: ") ) {
    print $logh $input, "\n";
}

close $logh or die "$!";

END {
    return unless fileno $logh;
    print $logh "Close Logfile.\n";
    close $logh or warn $!;
}


"Beende" ich die while-Schleife mit einem CTRL+D, wird das logfile still geschlossen, bevor der END-Block ausgeführt wird.
Breche ich die Schleife mit einem CTRL+C ab, greift das die() in interrupt() und das Logfile wird erst im END-Block geschlossen.

PS: Probiere gerade mit Deinem Code herum. Da habe ich auch das von Dir beschriebene Verhalten. Die Ursache habe ich noch nicht gefunden...
Last edited: 2014-08-04 21:53:54 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Problem mit Filehandle im END Block