创建perl脚本来模仿linux命令“ifconfig”的问题

时间:2013-04-17 19:44:46

标签: perl perl-module cpan ifconfig

我有一个作业,我将在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命令之间的唯一区别是我的脚本需要一个接口作为参数

2 个答案:

答案 0 :(得分:1)

那么,你在哪里定义$get_Iface_data

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

您是否了解面向对象编程以及Perl如何使用它? Perl有一个很好的tutorial来帮助你入门。

它所做的是你不能使用特定的方法(想想子程序),除了那个类的对象。从这段代码中,以及您的错误说明的内容,您从未定义过$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');

答案 1 :(得分: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";