2017-05-04 4 views
0

In einer .pm Datei habe ich einen Hash %DIFF_VARIABLES und möchte den Wert von $DIFF_VARIABLES{'MAIN'}{'value'} extrahieren.Wie bekomme ich den Wert von .pm/xml von Makefile

Ich möchte dies von Makefile ausführen.

Ich versuche, dies in der Datei Makefile

MY_VAR := ($shell perl -Mconfig -e "$DIFF_VARIABLES{'MAIN'}{'value'}" /home/my_path/TEST_MODULE_1.pm) 

Aber es funktioniert nicht.

Ich habe verschiedene Möglichkeiten ausprobiert, aber ich glaube, ich mache einen Fehler.


Basierend auf Below-Vorschlag habe ich versucht, diese, aber für mich immer noch daran, ihre nicht .. hier so ist das, was ich tat. Ich habe eine separate Perl-Datei erstellt, in der ich den Code, der den gewünschten Wert sucht, aus dem PERL-Modul platziert habe. Nun, in Makefile ausführen ich, dass Perl-Datei

Aber noch ist es nicht funktioniert ......

in Makefile hier ist das, was ich tat -

// comment --Lets say VAR_1's value came as 2. 

VAR_1 = $(shell perl ./my_new_perl_file.pl) export VAR_1 

ifeq ($(VAR_1), 1) ...do task1 else ..do task2 endif 

Aber es funktioniert nicht. .. Wenn ich VAR_1 = 1 oben im Makefile explizit definiere, dann funktioniert es ...

Irgendwelche Vorschläge? pls ..

+0

Ist der '% DIFF_VARIABLES' Hash in Ihrem Modul eine lexikalische Variable (definiert mit' my') oder eine Paketvariable (definiert mit 'our' oder' use vars')? –

+0

Es ist Paketvariable - definiert mit 'our' –

+0

Sie müssen den Inhalt von 'TEST_MODULE_1.pm' anzeigen. Was Sie geschrieben haben, übergibt die .pm-Datei als Eingabe für den Perl-Befehl, aber sie wird nie gelesen. Sie müssen * das * Modul ausführen, damit der Hash einen Wert erhält. – Borodin

Antwort

2

Sie müssen print den Wert, damit es zu Ihrem aufrufenden Prozess weitergegeben werden. Hier ist ein wirklich einfaches Paket:

package Value; 

our %DIFF_VARIABLES = (
    MAIN => { value => 'foo' }, 
); 

1; 

zu drucken, der Wert in einer Schale, wir Code wie folgt verwenden können:

$ perl -MValue -E'say $Value::DIFF_VARIABLES{MAIN}{value}' 
foo 

Wir können es auf eine Shell-Variable wie folgt vergeben:

$ VALUE=`perl -MValue -E'say $Value::DIFF_VARIABLES{MAIN}{value}'` 
$ echo $VALUE 
foo 

Und Sie können wahrscheinlich darauf aufbauen (mit $(shell ...)), etwas ähnliches in Ihrem Makefile zu tun.

+0

Danke für die Antwort Dave. Ich probiere, was Sie vorgeschlagen haben, aber scheint nicht für mich zu arbeiten ... etwas exp darüber zu tun. Werde meine Updates .. –

+0

Ich habe meine org Frage aktualisiert - mit Updates, was ich habe .. –

Verwandte Themen