Thread Benutzereingabe in Schleife wird nicht abgewartet (8 answers)
Opened by Uwe F. at 2018-01-02 11:38

Linuxer
 2018-01-02 17:09
#187867 #187867
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Der Vollständigkeit halber:

Man könnte das Skript etwas umstellen und etwas Shell-Magie (bash) verwenden:

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
#! /usr/bin/perl
use strict;
use warnings;
use 5.010;

# input is specified as file arguments; read them manually without magic
my @files;
for my $file ( @ARGV ) {
    open my $fh, '<', $file;
    while ( my $file = <$fh> ) {
        push @files, $file;
    }
}
chomp( @files );


# show read filenames and ask for input
for my $file ( @files ) {
    print "say something: ";
    chomp ( my $input = <STDIN> );

    say "$file: $input";
}



Aufruf dann mit:

Code: (dl )
perl t.pl <( ls -1 *.pl )


Das, was in <( ) steht, wird durch die Shell als Kommando ausgeführt (kann auch eine Verkettung wie ls -1 | head -n 3 sein) und die Ausgabe als (temporäre) Datei zur Verfügung gestellt.

Ergebnis:
Code: (dl )
1
2
3
$ perl t.pl <( ls -1 *.pl )
say something: Testing
t.pl: Testing



Aber ganz ehrlich: Auch sowas würde ich nur im Notfall verwenden. Und dann wäre noch zu klären, wie dieser Notfall aussehen sollte...
Besser ist es, auf den Ansatz zurückzugreifen, den hlubenow bereits aufzeigte, und selber die Dateinamen einzulesen und zu verarbeiten.
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 Benutzereingabe in Schleife wird nicht abgewartet