PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cfgmaker verändern


Ciartan
23.07.2007, 15:57
Salut,

also, ich mache das MRTG von dem auf der Arbeit zu verwaltendem Netzwerk.
Dazu möchte ich in der cfgmaker-Datei vom MRTG allerdings eine Änderung an der $sysname Variable durchführen. Diese bekommt immer einen Wert der wie folgt aussieht Bezeichnung-Name-Standort.xxxx.xxx.xx. Ich möchte den Teil hinter dem ersten Punkt sozusagen wegschneiden, damit ich dies nicht immer manuel erledigen muss.


my $syscontact = $$router_dev{sysContact};
my $html_syscontact = html_escape($syscontact);
my $syslocation = $$router_dev{sysLocation};
my $html_syslocation = html_escape($syslocation);
my $sysname = '$$router_dev{sysName}';

my @new_sysname = split(/\./,$sysname,2);
$sysname = $new_sysname[0];



Bei my $sysname = '$$router_dev{sysName}'; habe ich es auch schon mit my $sysname = "$$router_dev{sysName}"; versucht, wiel ich dachte, dass das eventuel kein String sein könnte (kenne mich mit Perl und mit dem MRTG nicht besonders gut aus und das $$ verwirrt mich).

Wenn vielleicht jemand mir helfen könnte wäre das schön.. Ich hoffe mal ich hab genug Informationen gegeben oO

MfG

Ciartan


eViL_oNe
26.07.2007, 00:05
die unteren zwei Zeilen sind richtig. Das Problem bei dir sind eher die oberen Definitionen -- mittels $$ löst man (ohne strict refs zumindest) Variablenreferenzen auf, ich glaube kaum, dass du das damit beabsichtigt hast:

my $test = 1;
my $test2 = $$test; # test2 hat nun den Wert von test, also 1

Zudem führt ein Setzen von einer Variable in einfache Hochkommas, dass statt dem Wert der exakte String übernommen wird.

ohne die von dir erwähnte Software genauer zu kennen, glaube ich, dass du mit folgendem Code besser aufgehoben wärest:

my $syscontact = $router_dev{sysContact};
my $html_syscontact = html_escape($syscontact);
my $syslocation = $router_dev{sysLocation};
my $html_syslocation = html_escape($syslocation);
my $sysname = $router_dev{sysName};

my @new_sysname = split(/\./,$sysname,2);
$sysname = $new_sysname[0];

Ciartan
26.07.2007, 16:53
Also.. mit dem von dir vorgeschlagenen Code gibt es folgende Fehlermeldung:

Global symbol "%router_dev" requires explicit package name at cfgmaker line 364.
Global symbol "%router_dev" requires explicit package name at cfgmaker line 366.
Global symbol "%router_dev" requires explicit package name at cfgmaker line 368.


Dann benötigt man diese $$ anscheinend doch? Hab aber gerade gegoogelt und soweit ich verstanden habe, hat es nur die Bedeutung die da erklät wurde von evil oO

butterkeks
26.07.2007, 18:06
wie und wo ist router_dev denn definiert (ganz grob)?

eViL_oNe
26.07.2007, 18:43
our %router_dev;

butterkeks
26.07.2007, 19:07
mhh dann müsste das doch laufen, oder? Die Meldungen kenne ich nur im Zusammenhang mit "use strict;", wenn man einen Bezeichner nicht vorher (mit my oder out) deklariert hat...

Vielleicht tut es ein

use vars qw(%router_dev);

am Anfang der Datei (hinter use strict; )

Ciartan
27.07.2007, 10:23
my $router_dev = $$router_ref{deviceinfo};

So ist $router_dev definiert. Hab allerdings, da die Variable immer noch net anständig verändert wird dort beim routerref das 2. $ weggemacht.. funktionniert scheinbar immer noch net, dabei sollte es nun doch eigentlich *an Kopf kratz*

Aber wenigstens gibs keinen Error mehr :)

Danke aber für die Hilfe :)