2016-04-25 10 views
-4

Ich habe eine Liste von Perl-Skripten wie sample_1.pl, sample_2.pl & sample_3.pl. in einem Array gespeichert alsAufruf von Perl-Skripten aus einem Perl-Skript, vorausgesetzt, die Skripte sind in einem Array

my @Scripts (
    sample_1 => "This is script number 1 ", 
    sample_2 => "This is script number 2 ", 
    sample_3 => "This is script number 3 " 
) 

Nun, wie telefoniere ich diese Skripte foreach Schleife

+0

Was meinen Sie mit dem Aufruf dieses Skripts? Sie könnten dies verwenden, indem Sie $ file in foreach loop verwenden und Subroutinen dieser Dateien aufrufen. – AbhiNickz

+0

Benutze [system] (http://perldoc.perl.org/functions/system.html) –

+2

Es gibt ein '=' nach 'my @ Scripts' fehlt. – choroba

Antwort

2
my @scripts = ("print 'Hello, omg'", "print 42"); 
eval $_ for @scripts 

mit der Wenn Sie ihnen tun verwenden oft in einem einzigen Skript ausführen möchten, sollten Sie besser speichern kompiliert Versionen statt Quellcodes:

my @scripts = map eval "sub { $_ }", "print 'Hello, omg'", "print 42"; 
$_->() for @scripts 

Es wird eine Größenordnung schneller sein.

4

Erstens ist es nicht klar, ob Sie Ihre Befehle in einem Array oder einem Hash speichern möchten. Die beiden Datenstrukturen sind in Perl unterschiedlich. In Ihrem Code speichern Sie die Befehle in einem Array (@Scripts), aber Sie initialisieren dieses Array mit einer sehr Hash-ähnlichen Syntax ((key => value, ...)). Deine Syntax wird funktionieren, aber sie tut nicht, was (ich denke!) Du machen willst. Sie enden auch mit Ihren Schlüsseln im Array, und es ist schwer, sie zu überspringen.

Wenn Sie Ihre Befehle in einem Array speichern möchten, dann tun Sie etwas wie folgt aus:

my @Scripts = (
    "This is script number 1 ", 
    "This is script number 2 ", 
    "This is script number 3 " 
); 

system($_) for @Scripts; 

Wenn Sie sie in einem Hash aus irgendeinem Grund speichern möchten, dann speichern Sie sie in eine hat und ein verwenden Hash-Funktion, um die gewünschten Werte zu erhalten.

my %Scripts = (# %, not @ for a hash 
    sample_1 => "This is script number 1 ", 
    sample_2 => "This is script number 2 ", 
    sample_3 => "This is script number 3 " 
); 

system($_) for values %Scripts; 

Aber beachten Sie, dass Hashes sind ungeordnete, so dass Sie steuern können, um die Reihenfolge nicht, in der Ihre Befehle ausgeführt werden.

+0

Ich bin nicht sicher, wie das hilft. Aus der Frage, die ich denke, ist es viel wahrscheinlicher, dass das OP das System $ _ für die Map "$ _. Pl", Schlüssel% Scripts 'vorsieht. Wie auch immer, Sie sind mit einer spekulativen Antwort eingesprungen, wenn mehr Informationen benötigt werden, vermutlich in der Hoffnung, Punkte zu sammeln. Ich wünschte, die Leute würden das nicht tun – Borodin

+1

Meine Antwort wurde sicherlich nicht zum Zwecke der Sammlung von Punkten veröffentlicht. Ich habe viele Punkte, brauche ich wirklich nicht mehr. Ich denke, meine Antwort war aus zwei Gründen wert - erstens ist es wichtig, die Verwirrung zwischen Arrays und Hashes zu klären, und zweitens demonstriert sie die Verwendung von 'system()', das im Mittelpunkt jeder Antwort auf diese Frage stehen wird . Es ist wahr, dass wir mehr Details über den Inhalt des Arrays (oder Hash) benötigen, um eine wirklich genaue Antwort zu geben, aber ich denke, meiner ist aufgrund der Informationen, die wir derzeit haben, ziemlich nah dran. Entschuldigung, dass Sie nicht einverstanden sind. –

Verwandte Themen