Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
值未存储在文件中<;Perl>;_Perl - Fatal编程技术网

值未存储在文件中<;Perl>;

值未存储在文件中<;Perl>;,perl,Perl,我是perl新手。我的动机是从txt文件中读取一些值,并在perl脚本中使用它 文本文件如下所示: Servers :: (local) Tomas-Server1 Tomas-Server2 .........** 我需要做的是获取第三行值(Tomas-Server2)并在perl脚本中使用它。基本上是调用perl脚本的第三个值 我已经为它编写了一个基本代码: my($ServName1,$ServName,$Serv

我是perl新手。我的动机是从txt文件中读取一些值,并在perl脚本中使用它

文本文件如下所示:

Servers ::              
   (local)

      Tomas-Server1

      Tomas-Server2
      .........**
我需要做的是获取第三行值(Tomas-Server2)并在perl脚本中使用它。基本上是调用perl脚本的第三个值

我已经为它编写了一个基本代码:

my($ServName1,$ServName,$ServName3) = getservername($servername);
my ($filenam) = 'data.txt';
my @Param = ();

open(INFILE,"<$filenam") or die "Couldn't open $filenam for reading\n";
while(<INFILE>) {
    chop($_); 
    push(@Param,$_);
}
close(INFILE);
return @Param;
}
my($ServName1,$ServName,$ServName3)=getservername($servername);
my($filenam)='data.txt';
我的@Param=();

open(infle),“您从未定义过
$ServName2
变量。
$ServName1
$ServName3
之间的变量名为
$ServName
,没有编号。

示例数据有一些问题,但我想我理解您的意图。假设您想要第三个服务器值(不仅仅是第3行)您可能希望代码看起来像这样

#!perl

#some includes
use strict;
use warnings;
use Data::Dumper;

#set some vars
my $TargetFileName="data_file.txt";
my $TargetServerNumber=3;

#call the sub
my @ServerArray=GetServerName($TargetFileName);

#did we get anything back?
if(@ServerArray) {
    #yep, we got some content
    print "Server number ".$TargetServerNumber."/".($#ServerArray+1)." is \"".$ServerArray[$TargetServerNumber-1]."\"\n"; #array numbers are 0-based
} else {
    #nope, we read the file but didn't any matching content
    print "No servers found in file \"".$TargetFileName."\".\n";
} #end if

print "\n";
print "Here's what was loaded into \@ServerArray...\n";
print Data::Dumper::Dumper(@ServerArray); #so you can see the full content of @ServerArray
print "All Done\n";
exit;

#----- subs go here -----

sub GetServerName {
    my $DataFileName=shift; #pull in the first arg - this alters @_ for the rest of the sub, so take care when doing this
    my @ReturnArray;
    #do some QA
    if(!$DataFileName) {die "You need to provide a file name to use this sub.\n"} #do we have a file name?
    if(!stat($DataFileName)) {die "The requested file name of \"".$DataFileName."\" does not exist.\n";} #does the file exist?
    open(INFILE, "<".$DataFileName) or die "Unable to open \"".$DataFileName."\" - ".$!;

    #ok, read the file content
    while(my $Line=<INFILE>) {
        chop($Line);
        $Line=~s/^\s+//g; #remove leading white spaces
        $Line=~s/\s+$//g; #remove trailing white spaces
        if(!$Line) {next;} #blank line, skip it

        #check for the headers
        if($Line=~m/^Servers/) {next;} #skip lines beginning with "Servers"
        if($Line=~m/^\(local\)/) {next;} #skip lines beginning with "(local)"

        #if we get here, we must want the line content, so add it to the array
        push(@ReturnArray, $Line);
    } #end while
    close(INFILE);

    #send the array data back, if any
    return @ReturnArray
} #end GetServerName sub

__END__

stuff below here does not need to be commented
Servers ::              
   (local)

      Tomas-Server1 
      Tomas-Server2  

      Tomas-Server3
      Tomas-Server4

      Tomas-Server5

      Tomas-ServerLast

我想你忘了在第一行后面的某个地方加一个
sub-getservername{
行,在
my@Param=();
之前。那不是第三行。那是第七行。这些信息真的有必要吗?你似乎不是在问如何解析文件。你应该在所有文件的顶部加上
use strict;