2016-06-23 5 views
-1

Perlスクリプトを使用してすべてのMongoDBデータベースを表示するのに役立つ人はいますか?perlスクリプトを使用してmongodbに関連するすべてのデータベースを表示する方法

私はMongoDBに接続しており、この後に固執しています。

use MongoDB; 
use MongoDB::OID; 
use Data::Dumper; 

use strict; 
use warnings; 

use lib '.'; 
use Exporter qw(import); 

our @EXPORT_OK = qw(teller); 

my $client = MongoDB::MongoClient->new(
    host => 'localhost', 
    port => 27020 
); 
my $db_list = listDatabases(); 

foreach my $n ($#db_list) { 
    say $db_list[$n]; 
} 

しかし、私はエラーを取得する:

私のコードは次のとおりです。

Global symbol "@db_list" requires explicit package name 
+2

あなたはフランケンシュタインのプログラムの怪物を書いたようです。それは同時にプログラムとモジュールの両方であるようです。それは定義されていない 'teller'をエクスポートしようとしますが、宣言されていないか定義されていない配列' @ db_list'(の最後のインデックス)を反復しようとする 'for'ループもあります。 'listDatabases'も呼びます。これも定義されていません。あなたがここでやろうとしていることを*正確に*言う必要があります。「すべてのMongoDBデータベース」*はあまり意味がありません。 – Borodin

答えて

1

次の2行が間違っ多くはかなりあります。

my $db_list = listDatabases(); 
foreach my $n ($#db_list) { say $db_list[$n]; } 

エラーは、同じ名前の配列変数とスカラー変数が混同しているために発生します。

my $db_listは、スカラー変数を宣言します。しかし$#db_list@db_listと呼ばれる配列を指します。おそらく$#{$db_List}を意味しています。しかし、それでも、foreach my $n ($#{$db_list})は1つのアイテムを含むリストを反復するので、あなたが望むことはしません。私は、あなたはおそらく望んでいたと思う:

foreach my $n (0 .. $#{$db_list}) 

私はあなたのlistDatabases()サブルーチンがどのように動作するか分からないとして、ここで関与少し当て推量があります。それは配列参照を返すようにあなたは行動するが、それはそれはあなたのコードがあるべきでは配列、返している可能性があります:それは確かに不可能だlistDatabases()についての詳細を知らなくても

# Note: array, not scalar 
my @db_list = listDatabases(); 
foreach my $n (0 .. $#db_list) { say $db_list[$n]; } 

を。

MongoDB::MongoClientにはdatabase_names()というメソッドがあります。

my @db_list = $client->database_names; 
foreach my $n (0 .. $#db_list) { say $db_list[$n]; } 
+0

あなたの提案は私に多くの助けをします..ありがとうございます。 – Madhu

+1

@Madhu:If私の提案は便利です、私の答えをupvotingまたは受け入れることを検討してください。 –

+0

コメントなし@Madhu –

関連する問題