【问题标题】:Perl MySQL ProblemPerl MySQL 问题
【发布时间】:2026-02-05 21:10:01
【问题描述】:

我是一个完整的 Perl 菜鸟,我是一名 PHP 程序员,我正在努力学习 Perl,目前using Tizag's tutorial
我在位于 c:\xampp 的 Windows Xampp 安装上运行它 -
我有这个代码,这给了我一个错误。

use strict; use warnings;
use CGI::Simple;
use DBI;

$host = "localhost";
$database = "store";
$tablename = "inventory";
$user = "root";
$pw = "";

$connect = Mysql->connect($host, $database, $user, $pw);

@databases = $connect->listdbs;
foreach $database (@databases) {
    print "$database<br />";
}

错误:

在@INC 中找不到 CGI/Simple.pm(@INC 包含:C:/xampp/perl/site/lib/ C:/xampp/perl/lib C:/xampp/perl/site/lib C :/xampp/apache) 在 C:/xampp/htdocs/testing/learn_perl/index.pl 第 5 行。 BEGIN 失败——编译在 C:/xampp/htdocs/testing/learn_perl/index.pl 第 5 行中止。,

【问题讨论】:

标签: mysql perl


【解决方案1】:

您向我们展示的任何代码都不需要 CGI::Simple。如果您打算在以后将您的程序变成 CGI 应用程序,那么我建议您使用 CGI 而不是 CGI::Simple。 CGI 最明显的优势之一是它包含在标准 Perl 安装中,因此您无需自行安装。

但这只是你的问题的开始。看起来你找到了一个糟糕的教程。使用链接到 learn.perl.org 的资源可能会做得更好。

【讨论】:

    【解决方案2】:

    http://startperl.blogspot.com/2007/11/perl-module-how-to-install-perl-module.html复制粘贴

    每个活动状态的 perl 安装都提供了一个ppm utility,至少我用 perl Vesion 5.8.X 得到了它你所要做的就是按照以下步骤操作

    1. 点击开始
    2. 点击运行
    3. 输入 cmd 并回车
    4. 输入 ppm 并按回车
    5. 获得 ppm 实用程序提示后
      像 ppm> 类型安装模块名称
      例如。安装 CGI::Simple

    ppm 实用程序将为您安装 perl 模块。

    【讨论】:

    • 运行相同的 ppm thingy 并在ppm&gt; 提示符后输入search CGI* 以查看是否安装了模块CGI:Simple
    • CGI::Simple 到底是干什么用的?我在一些随机论坛上找到了它。虽然它已经安装了。
    • 我用谷歌搜索过,找到了那个页面,因为我是一个 Perl 初学者,我完全糊涂了。
    • 除了代码,几乎没有 Perl 特定的代码。
    • @joshwaa,回到你的问题:在你的硬盘上搜索文件Simple.pm。然后问一个问题,例如:perl: how do I change the include path to include 并插入您在问题中找到的位置。
    【解决方案3】:

    您应该从 CPAN 安装 CGI::Simple 模块。

    从 CPAN 安装模块的一种简单方法是:

    curl -L http://cpanmin.us | perl - --sudo App::cpanminus
    

    然后你可以用简单的方式安装模块:

    cpanm Some::Module
    

    例如

    cpanm CGI::Simple
    

    【讨论】:

    • 我在一台 Windows 机器上。我不知道 CGI::Simple 是什么,我只想能够查询 MySQL 数据库
    【解决方案4】:

    哎呀,那个教程看起来不太好。试试这个,让我解释一下它的作用:

    #!c:\strawberry\perl\bin\perl.exe -T
    
    use strict;
    use warnings;
    
    use CGI;
    use CGI::Carp qw(fatalsToBrowser);
    use DBI;
    
    my $host = 'localhost';
    my $database = 'store';
    my $tablename = 'inventory';
    my $user = 'root';
    my $pw = '';
    
    my $dbh = DBI->connect("DBI:mysql:$database;host=$host",
        $user, $pw, { RaiseError => 1 })
        or die "Unable to open database: $DBI::errstr";
    
    my $stmt = $dbh->prepare('SHOW DATABASES');
    $stmt->execute();
    my $databases = $stmt->fetchall_arrayref();
    $dbh->disconnect();
    
    my $page = new CGI;
    print $page->header();
    print $page->start_html();
    foreach $database (@$databases) {
        print $database->[0] . '<br />';
    }
    print $page->end_html();
    

    第一行是一个标准脚本头,让 Web 服务器知道要运行什么二进制文件。在这种情况下,我添加了“-T”标志以在 Perl 中打开 taint mode。这将有助于安全。

    您确实添加了“使用严格”和“使用警告”,非常好。养成始终将这些放在脚本顶部的做法。

    接下来的三个 use 语句是来自 CPAN 的库,它们将包含在此脚本中。在这种情况下,我使用CGI 生成HTML,CGI::Carp 用于向浏览器输出错误消息(这有助于调试),DBI 用于使用数据库。如果您收到您发布的错误消息(“无法定位...”),那么这意味着您正在尝试使用尚未从 CPAN 安装的库。您可以查看this document 以获取有关安装库的帮助。

    接下来我设置局部变量。由于我在上面打开了严格模式,因此每个新变量都必须以“my”或“our”作为前缀,具体取决于我想要的范围。

    现在我使用 DBI 模块连接到数据库。这里我使用的是 mysql 库,因此请确保已安装 DBD::mysql。我还传递了一个名为“RaiseError”的可选参数;这将确保任何 SQL 错误都会导致错误。如果我没有打开它,我将不得不检查我所做的任何 SQL 调用的返回变量。如果连接有任何问题,我还决定使用“die”操作终止脚本。您可能希望将其更改为用于生产的重定向; 'or' 关键字之后的任何内容都将在错误时执行。

    然后我执行我的实际 SQL 操作。使用我的数据库句柄,我准备了一个语句并执行它。然后我将所有结果检索到array reference 以供以后使用。然后我断开与数据库的连接。

    最后一个块实际上打印出 HTML。我创建了一个新的 CGI 对象,然后打印出标题。我启动 HTML,然后打印出找到的每个数据库。在 foreach 语句中,我需要让 Perl 知道 $databases 实际上是一个数组引用,所以我在变量之前包含了 @ 符号。然后,由于每一行都是另一个数组引用,我使用 '->[0]' 运算符获得第一列。最后我完成了 HTML。

    【讨论】: