मैं एक पर्ल स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो पाइप डेटा पढ़ता है, फिर उपयोगकर्ता को उस डेटा के आधार पर इनपुट के लिए संकेत देता है। निम्न स्क्रिप्ट, prompt_for_action
, मैं क्या करने की कोशिश कर रहा हूँ:क्या मैं पर्ल में एसटीडीआईएन पर पाइप इनपुट पढ़ने के बाद उपयोगकर्ता इनपुट के लिए संकेत दे सकता हूं?
#!/usr/bin/perl
my @hosts =();
while (<>) {
my $host = $_;
$host =~ s/\n//; # strip newlines
push(@hosts, $host);
}
for my $host (@hosts) {
print "Do you want to do x with $host ? y/n: ";
chomp(my $answer = <>);
print "You said `$answer`.\n";
}
लेकिन जब मैं इसे चलाने के उपयोगकर्ता इनपुट के लिए कोई प्रतीक्षा नहीं है, यह सिर्फ मुझे टाइप करने के लिए की प्रतीक्षा किए बिना के माध्यम से चल रही है:
$ echo "test1.example.com
> test2.example.com" | ./prompt_for_action
Do you want to do x with test1.example.com ? y/n: You said ``.
Do you want to do x with test2.example.com ? y/n: You said ``.
अगर मैं STDIN से मेरे डेटा को पढ़ने नहीं है ...
#!/usr/bin/perl
my @hosts = ('test1.example.com', 'test12.example.com');
for my $host (@hosts) {
print "Do you want to do x with $host ? y/n: ";
chomp(my $answer = <>);
print "You said `$answer`.\n";
}
तो स्क्रिप्ट ठीक काम करता है:
$ ./prompt_for_action
Do you want to do x with test1.example.com ? y/n: y
You said `y`.
Do you want to do x with test12.example.com ? y/n: n
You said `n`.
क्या एसटीडीआईएन को पाइपिंग है और फिर उपयोगकर्ता इनपुट के लिए संकेत दे रहा है? यदि हां, तो कैसे?
यह अविश्वसनीय है कि पर्ल सिंटैक्स हाइलाइटिंग सिस्टम को तोड़ने पर कितना अच्छा है। – sidyll