我想从文本文件中查询昵称列表。
#!/usr/bin/perl
use strict;
use warnings;
use MongoDB;
# Open file
print "--> Read file\n";
open( INPUT, "<userlist.txt" ) or die "Could not open the file: $!\n";
print "--> Read INPUT OK\n";
open( OUTPUT, ">>outfile.txt" ) or die "Could not open the file: $!\n";
print "--> Read OUTPUT OK\n";
# MongoDB parameter
my $mongoHost = localhost;
my $mongoPort = 12345;
my $conn = MongoDB::Connection->new( "host" => "$mongoHost", "port" => $mongoPort ); # Open connection
my $db = $conn->mylist; # Connect to database
my $user_stats = $db->user_stats; # Choose a collection
print "--> Connect to MongoDB\n";
# Read through line
foreach my $line ( <INPUT> ) {
# Extract content
chomp( $line ); # Remove newline
print "$line\n";
my $statsResult = $user_stats->find( { nickname => '$line' } );
while ( my $obj = $statsResult->next ) {
print $obj->{ "nickname" } . ";";
print $obj->{ "total" } . "\n";
}
}
close( OUTPUT );
close( INPUT );
print "--> End of Code\n";
exit 0;
似乎无法在第$line
行识别变量my $statsResult = $user_stats->find( { msisdn => '$line' } );
如果我用$line
之类的字符串替换mynickname
,它就有效。之前的print语句可以正常工作。
我在这里错过了什么吗?
答案 0 :(得分:4)
您在行中使用单引号
my $statsResult = $user_stats->find( { nickname => '$line' } );
意味着正在搜索数据库中的字符串$line
,而不是变量的内容。删除单引号,你应该没事。
此外,这里有关于Perl中不同引用形式的nice tutorial,这解释了为什么单引号与双引号不同,qq
意味着什么等等。