我一直在尝试从位于Handlers
文件夹中的两个文件夹Games
和System
中加载文件。
它给了我一个错误
Can't use string ("Server/Systems/Handlers/Buddies."...) as an ARRAY ref while "strict refs" in use at Server/ClubPenguin.pm line 247`
这是代码
method loadSystems {
my @arrHandlers = glob('Server/Systems/Handlers/*.pm');
my @arrGames = glob('Server/Systems/Games/*.pm');
my @arrFiles = ( @arrHandlers, @arrGames );
foreach (@arrFiles) { #Line 247
foreach my $files ( @{$_} ) {
my $strClass = basename( $_, '.pm' );
my $objSystem = $strClass->new($self);
$self->{systems}->{$strClass} = $objSystem;
}
}
my $sysCount = scalar( keys %{ $self->{systems} } );
if ( $sysCount > 0 ) {
$self->{modules}->{logger}->
output( 'Successfully Loaded ' . $sysCount . ' Systems', Logger::LEVELS->{inf} );
}
else {
$self->{modules}->{logger}->
output( 'Failed To Load Any Systems', Logger::LEVELS->{err} );
}
}
答案 0 :(得分:1)
问题是这一行
my @arrFiles = ( @arrHandlers, @arrGames );
只是将两个数组@arrHandlers
和@arrGames
的内容合并到一个数组中。它不会像你期望的那样创建一个包含两个引用的数组
你需要写
for ( @arrFiles ) {
...
}
也无需复制原始数组,甚至无需存储glob
调用的结果。你可以写
for ( glob 'Server/Systems/{Handlers,Games}/*.pm' ) {
...
}
效果相同
答案 1 :(得分:0)
我认为你需要这个:
foreach (@arrFiles) {
my $strClass = basename($_, '.pm');
my $objSystem = $strClass->new($self);
$self->{systems}->{$strClass} = $objSystem;
}