我有一个任务,我要在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::Stats
和Net::Ifconfig::Wrapper
。我的脚本和ifconfig
命令之间的唯一区别是我的脚本将需要一个接口作为参数
那么,您在哪里定义$get_Iface_data
呢?
$foo->bar
是一个方法调用语法。这意味着$foo
是某种对象, bar
是可以在该对象上使用的方法。
你了解面向对象编程和Perl如何使用它吗?Perl有一个很好的教程来帮助你入门。
所做的是,你不能使用一个特定的方法(想想子程序),除非在该类的对象上。从这段代码以及您的错误状态来看,您从未定义过$get_Iface_data
,因此您必须定义它。在这种情况下,您必须创建对象:
my $get_Iface_data = Net::Int::Stats->new();
现在,您可以对%get_Iface_data
对象使用各种Net::Int::Stats
方法:
my $rx_packets = $get_Iface_data->value($Iface, 'rx_packets');
您只是错过了创建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";