Portál AbcLinuxu, 12. května 2025 08:52
Zdravim všechny.
Potřeboval bych poradit/postrčit, kde mám chybičku v malém scriptíčku. ((: .... >.<
Tady je:
<PRE>
#!/usr/bin/perl
use strict;
use warnings;
use Net::CIDR::Lite;
my $ipv4String='[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}';
if(defined $ARGV[0] && $ARGV[0] eq '-h'){
print "usage: $0
This script summarizes your IP classes (if possible). Input IPs with mask one per line. End with CTRL+D. Optionally,
redirect a file to stdin like so:
$0 < cidr =" Net::CIDR::Lite-">new;
while(<>){
if(/($ipv4String\/[0-9]{1,2})/){
my $item=$1;
$cidr->add($item);
}
else{
print "Ignoring previous line.\n";
}
}
my @cidr_list = $cidr->list;
print "======Aggregated IP list:======\n";
foreach my $item(@cidr_list){
print "$item\n";
}
Kdyz to spustim tak mi to píše tohle:
Bareword found where operator expected at ./summarisation.pl line 12, near "$0 < cidr =" Net::CIDR::Lite"
(Might be a runaway multi-line "" string starting on line 9)
(Missing operator before Net::CIDR::Lite?)
String found where operator expected at ./summarisation.pl line 24, near "print ""
(Might be a runaway multi-line "" string starting on line 20)
(Missing semicolon on previous line?)
String found where operator expected at ./summarisation.pl line 26, near "print ""
(Might be a runaway multi-line "" string starting on line 24)
(Missing semicolon on previous line?)
Backslash found where operator expected at ./summarisation.pl line 26, near "$item\"
(Missing operator before \?)
String found where operator expected at ./summarisation.pl line 26, at end of line
(Missing semicolon on previous line?)
syntax error at ./summarisation.pl line 12, near "$0 < cidr =" Net::CIDR::Lite"
Global symbol "$item" requires explicit package name at ./summarisation.pl line 26.
Can't find string terminator '"' anywhere before EOF at ./summarisation.pl line 26.
</PRE>
Předem děkuji
$0 < cidr =" Net::CIDR::Lite-">new;
To má dělat to, že co vložíš z klávesnice po spustění scriptu přidá jako object new.
Podrobnosti zde: http://search.cpan.org/dist/Net-CIDR-Lite/Lite.pm
V perlu moc neumim, takže je možný že tam fakt někde chybí závorka či něco jinýho, akorát nejsem schopnej říct kde a co?
Takže jestli víš, budu rád když mi to prozradíš...
Díky
my $cidr = Net::CIDR::Lite->new;
) hodit na samostatnou řádku, takhle nemáš vůbec proměnou $cidr
definovanou. Tím zrušíš ten řádek, na který jses se tě ptal. Dobré taky bývá po zobrazení nápovědy skript ukončit.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.