Ich versuche, ein paar Funktionen zu erstellen, die zusammenarbeiten werden. getFH
sollte in den Modus zum Öffnen der Datei (entweder >
oder <
) und dann die Datei selbst (von der Befehlszeile) nehmen. Es sollte überprüft werden, ob die Datei geöffnet werden kann, dann geöffnet und das Dateihandle zurückgegeben werden. doSomething
sollte das Datei-Handle übernehmen und die Daten durchlaufen und alles tun. Allerdings, wenn die Programmzeilen der while-Schleife, ich den Fehler:Dateihandle von Subroutine zurückgeben und an andere Subroutine übergeben
readline() on unopened filehandle 1
Was mache ich hier falsch?
#! /usr/bin/perl
use warnings;
use strict;
use feature qw(say);
use Getopt::Long;
use Pod::Usage;
# command line param(s)
my $infile = '';
my $usage = "\n\n$0 [options] \n
Options
-infile Infile
-help Show this help message
\n";
# check flags
GetOptions(
'infile=s' => \$infile,
help => sub { pod2usage($usage) },
) or pod2usage(2);
my $inFH = getFh('<', $infile);
doSomething($inFH);
## Subroutines ##
## getFH ##
## @params:
## How to open file: '<' or '>'
## File to open
sub getFh {
my ($read_or_write, $file) = @_;
my $fh;
if (! defined $read_or_write) {
die "Read or Write symbol not provided", $!;
}
if (! defined $file) {
die "File not provided", $!;
}
unless (-e -f -r -w $file) {
die "File $file not suitable to use", $!;
}
unless (open($fh, $read_or_write, $file)) {
die "Cannot open $file",$!;
}
return($fh);
}
#Take in filehandle and do something with data
sub doSomething{
my $fh = @_;
while (<$fh>) {
say $_;
}
}
Ah, ich wusste, dass es etwas Einfaches wie das war. Danke @Dave Sherohman, der sich immer noch wieder mit Perl anfreundete. Den ganzen Sommer über in R programmieren zu können –