0

我有一个任务,我要在 Linux 中创建一个 Perl 脚本来模仿命令ifconfig。该命令主要显示有关网络接口的信息。我已经创建了该程序,但是有几行代码给了我一些问题,如果有人可以为我更正代码,我将不胜感激。我得到的错误说$get_iface_data requires an explicit package name at line 8,但是我不知道如何声明。

#!/usr/bin/perl
use strict;
use warnings;
use Net::Int::Stats;
use Net::Ifconfig::Wrapper;

my $Iface   = $ARGV[0];
my $rx_packets  = $get_Iface_data->value($Iface, 'rx_packets');
my $Iface_Info = Net::Ifconfig::Wrapper::Ifconfig('list', '', '', '');
print "\tether ". $Iface_Info->{$Iface}{'ether'}."\n";

我的任务基本上要求我获取一个接口作为输入,并显示有关该接口的信息,就像ifconfig命令一样。我还使用了两个包,Net::Int::StatsNet::Ifconfig::Wrapper. 我的脚本和命令之间的唯一区别ifconfig是我的脚本需要一个接口作为参数

4

2 回答 2

1

好吧,你在哪里定义的$get_Iface_data

$foo->bar是一种方法调用语法。这意味着这$foo是某种对象,并且bar是可以在该对象上使用的方法。

你了解面向对象编程以及 Perl 如何使用它吗?Perl 有一个很好的教程可以帮助你入门。

这样做的结果是,除了该类的对象之外,您不能使用特定的方法(想想子例程)。从这段代码和你的错误状态来看,你从来没有定义过$get_Iface_data,所以你必须定义它。在这种情况下,您必须创建对象:

my $get_Iface_data = Net::Int::Stats->new();

现在,您可以在对象上使用各种Net::Int::Stats 方法%get_Iface_data

my $rx_packets  = $get_Iface_data->value($Iface, 'rx_packets');
于 2013-04-17T21:19:13.980 回答
0

您只是缺少创建 Net::Int::Stats 对象的行:

#!/usr/bin/perl
use strict;
use warnings;
use Net::Int::Stats;
use Net::Ifconfig::Wrapper;

my $Iface   = $ARGV[0];
my $get_Iface_data = Net::Int::Stats->new();
my $rx_packets  = $get_Iface_data->value($Iface, 'rx_packets');
my $Iface_Info = Net::Ifconfig::Wrapper::Ifconfig('list', '', '', '');
print "\tether ". $Iface_Info->{$Iface}{'ether'}."\n";
于 2013-04-17T21:16:41.457 回答