2016-05-31 13 views
1

Ich versuche, ein Perl-Programm zu schreiben:Programm Perl zwei verschiedene Eingänge durch STDIN nehmen

print "Enter the filename:"; 
    $filename = readline STDIN; 

    print "Enter the string to be compared"; 
    $string1 = readline STDIN; 

Um diese beiden Eingänge auf einmal zu kombinieren, ich habe folgendes:

print "Enter the filename and string to be compared:"; 
    my $input1 = readline STDIN; 
    my @name = split(' ',$input1); //split the input parameters by space 
    $filename = $name[0]; 
    $string1 = $name[1]; 
    chomp $string1; 

Das ist Funktionscode, ich wollte wissen, ob es andere Möglichkeiten gibt, eine optimierte Version für diese Logik zu implementieren?

Danke, DD

+2

definieren * optimiert *! – salva

+0

Ich würde dir nicht empfehlen, auf diese Weise zu optimieren. Was machen Sie, wenn der Dateiname Whitespace enthält? Die Logik wird zunehmen. Schau @mkHun unswer. –

+0

Werfen Sie einen Blick auf http://perldoc.perl.org/Getopt/Long.html – Toto

Antwort

5

Das etwa ist so optimiert, wie Sie bekommen. Versuchen Sie nicht, den Code zu optimieren, bis Sie sicher sind, dass Sie ihn benötigen. Da dies ein Warten auf IO ist, ist es nicht wichtig, weil IO langsamer ist als alles, was Sie im Code tun.

Aber wenn Sie bedeuten mehr prägnante:

print "Enter the filename and string to be compared:"; 
chomp (my ($filename, $string) = split ' ', <>); 

Dies geschieht <> - was die Magie Dateihandle ist, und liest entweder STDIN oder einen Dateinamen in der Befehlszeile angegeben. (Funktioniert wie grep/sed/awk).

Wir teilen es auf ein Leerzeichen in einem skalaren Kontext - und übergeben dann die Werte aus Split an eine Listenzuweisung an $filename und $string. Das ist dann chomped, um linefeeds zu strippen.

2

Was kite Von Perl Geheimnis

use warnings; 
use strict; 
print "Enter the filename and string to be compared:"; 
chomp(my @ar = (~~<>, ~~<>)); 
print @ar;   
+3

Während ich clever bin, bin ich nicht wirklich davon überzeugt, dass irgendetwas in 'Perl Secret' etwas ist, das Sie in echtem Code verwenden sollten, einfach weil es obskur ist . – Sobrique

+0

'Skalar (<>)' oder '" ". <>' Wäre weniger "geheim". // Beachten Sie, dass das Lesen von einem Datei-Handle nach der Rückgabe von EOF ein "no-no" ist, daher ist diese Vorgehensweise inhärent fehlerhaft. – ikegami

0

Versuchen Sie den Code unten mit dem `comand mit: perl your_script.pl -file_name 'irgendeine_Datei' -string 'some_string'

use Getopt::Long; 

my ($file_name, $string); 
GetOptions(
'file_name=s' => \$file_name, 
'string=s' => \$string, 
) or die "Could not parse options"; 

if($file_name eq $string) 
{ 
print "The file name is the same as the string\n"; 
}else{ 
print "Not a match\n"; 
} 
Verwandte Themen