Perl关联数组和变量赋值

Bra*_*don 3 arrays perl associative-array

我无法理解它应该如何工作.我在while循环之外定义了两个哈希.目标是能够检测shell类型,并将适当的哈希值分配给新的$ shell变量.这是我目前正在尝试的代码..

#!/usr/bin/perl
use strict;
use warnings;

use POSIX;
use DateTime;
use Term::ANSIColor qw(:constants);

local $Term::ANSIColor::AUTORESET = 1;
my $dt = DateTime->now;   # Stores current date and time as datetime object

my %multicity = (
        url        => "example.com",
        ftpuser    => "user",
        ftppass    => "pass",
        remote_dir => "/httpdocs/",
        dbname     => "database"
);

my %singlecity = (
        url        => "example2.com",
        ftpuser    => "user",
        ftppass    => "pass",
        remote_dir => "/httpdocs/",
        dbname     => "database"
);

open (MYFILE, 'sites.txt');

LINE: while (<MYFILE>) {
    next LINE if /^#/;
    my ($shelltype, $siteurl, $ftpuser, $ftppass, $dbname) = split /\|/;

    # 1|example.com|user|pass|databasename - This should be a singlecity shell type.
    if ($shelltype == 1) { my $shell = \%multicity; } else { my $shell = \%singlecity; };

    print "Shelltype: $shelltype\n";
    print "Should be $shell{url}\n";

}
close (MYFILE);
Run Code Online (Sandbox Code Playgroud)

我尝试了许多不同的事情但没有用,所以我终于在stackoverflow上求助于这里的专业人士来获得一些方向!

很感谢任何形式的帮助.谢谢.

sim*_*que 5

my $shellif块内的词汇.将它移到外面if或在那里不可用.添加一些缩进有助于发现这一点.

my $shell;
if ($shelltype == 1) { 
  $shell = \%multicity; 
} else { 
  $shell = \%singlecity; 
};
Run Code Online (Sandbox Code Playgroud)

在那之后,你会得到一个警告说%shell未定义.那是因为你正在使用,$shell{url}但你定义$shell为哈希引用,所以你需要$shell->{url}$$shell{url}在你的print.