我正在尝试运行简单的“MongoDB:Tutorial”教程:
http://search.cpan.org/dist/MongoDB/lib/MongoDB/Tutorial.pod
我的目标是从Perl脚本连接到MongoDB数据库.我用cpanm安装了MongoDB:
$sudo cpanm MongoDB MongoDB is up to date. (0.501.1)
我创建了一个名为loadRaw.pl的简单Perl脚本:
use strict; use warnings; use MongoDB; use MongoDB::Connection; use MongoDB::OID; print "hello\n";
当我尝试运行脚本时,我收到一堆错误:
$perl ./loadRaw.pl String found where operator expected at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 271,near "confess "cannot set fields after querying"" (Do you need to predeclare confess?) String found where operator expected at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 273,near "confess 'not a hash reference'" (Do you need to predeclare confess?) String found where operator expected at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 294,near "confess "cannot set sort after querying"" (Do you need to predeclare confess?) String found where operator expected at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 296,near "confess 'not a hash reference'" (Do you need to predeclare confess?) String found where operator expected at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 317,near "confess "cannot set limit after querying"" (Do you need to predeclare confess?) String found where operator expected at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 343,near "confess "Cannot set tailable state"" (Do you need to predeclare confess?) String found where operator expected at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 366,near "confess "cannot set skip after querying"" (Do you need to predeclare confess?) String found where operator expected at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 390,near "confess "cannot set snapshot after querying"" (Do you need to predeclare confess?) String found where operator expected at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 408,near "confess "cannot set hint after querying"" (Do you need to predeclare confess?) String found where operator expected at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 410,near "confess 'not a hash reference'" (Do you need to predeclare confess?) Syntax error at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 90,near "has started_iterating" Syntax error at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 271,near "confess "cannot set fields after querying"" Syntax error at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 294,near "confess "cannot set sort after querying"" Syntax error at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 317,near "confess "cannot set limit after querying"" Syntax error at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 343,near "confess "Cannot set tailable state"" Syntax error at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 366,near "confess "cannot set skip after querying"" Syntax error at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 390,near "confess "cannot set snapshot after querying"" Syntax error at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 408,near "confess "cannot set hint after querying"" BEGIN not safe after errors--compilation aborted at /usr/local/lib/perl/5.10.1/MongoDB/Cursor.pm line 564. Compilation Failed in require at /usr/local/lib/perl/5.10.1/MongoDB/Connection.pm line 26. BEGIN Failed--compilation aborted at /usr/local/lib/perl/5.10.1/MongoDB/Connection.pm line 26. Compilation Failed in require at /usr/local/lib/perl/5.10.1/MongoDB.pm line 30. BEGIN Failed--compilation aborted at /usr/local/lib/perl/5.10.1/MongoDB.pm line 30. Compilation Failed in require at ./loadRaw.pl line 7. BEGIN Failed--compilation aborted at ./loadRaw.pl line 7.
看起来像MongoDB Perl模块(特别是Cursor.pm文件)有一些语法错误.如果我添加行使用Carp,第一批问题(与confess关键字相关的问题)就解决了;到Cursor.pm的顶部.但是,我认为我不应该这样做,而是我正在做其他错误的事情.此外,第二批错误(与has关键字相关的错误)不能通过包含Carp来解决.
还有其他人经历过这个吗?有任何想法吗?
解决方法
我从来没有发现到底出了什么问题,但它确实是我的系统和我的Perl配置所独有的.由于其他人能够毫无问题地执行提供的代码,我尝试使用Perlbrew执行代码(由friedo建议):
$perlbrew install perl-5.16.0 (Output not shown) $perlbrew switch perl-5.16.0 (Output not shown) $perlbrew install-cpanm (Output not shown) $/home/sthomas/perl5/perlbrew/bin/cpanm MongoDB (Output not shown) $perlbrew exec perl ./loadRaw.pl perl-5.16.0 ========== hello
由于它在Perlbrew安装中运行良好,因此问题不在于MongoDB或我的示例代码;它必须是我的Perl环境的一些奇怪的怪癖.我想我会尝试全新安装Perl和我所需的所有模块,看看是否有效.