The answers to this question, <STDIN>
numaralı girdiye nasıl giriş yapılacağını açıklar. Amacım şu soruya benzer: Benim birim testimin <>
'a sahte giriş yapması gerekiyor.Perl'in elmas operatörüne giriş nasıl yapılır?
Aynı tekniği <>
'a sahte girdiye uyguladığımda, çalışmaz. <>
'un giriş seviyesi açıklamaları bana komut satırında hiçbir dosya verilmediğinde STDIN'den okuduğuna inanmamı sağladı, ancak bu durum böyle görünmüyor.
Ben iş yapmaya çalışıyorum örnek:
#!/usr/bin/perl -w
use strict;
use warnings;
use Carp;
use English qw(-no_match_vars);
sub fake1 {
my $fakeinput = "asdf\n";
open my $stdin, '<', \$fakeinput
or croak "Cannot open STDIN to read from string: $ERRNO";
local *STDIN = $stdin;
my $line = <>;
print "fake1 line is $line\n";
return 0;
}
sub fake2 {
my $fakeinput = "asdf\n";
open my $stdin, '<', \$fakeinput
or croak "Cannot open STDIN to read from string: $ERRNO";
local *STDIN = $stdin;
my $line = <STDIN>;
print "fake2 line is $line\n";
return 0;
}
fake1();
fake2();
fake2
eserler fake1
yapmaz. Örnek bir oturum ("qwerty" Bana yazıyor):
$ perl /tmp/diamond.pl
qwerty
fake1 line is qwerty
fake2 line is asdf
Sorularım:
- Nasıl
<>
için can Sahte girdi? - Komut satırında hiçbir dosya verilmediğinde
<>
ve<STDIN>
arasındaki fark nedir? (Yanı Neden<STDIN>
ancak<>
için için bağlantılı soru çalışmalarında tekniği? Yapar)
teşekkürler.
Perlop için belgelerin okunması ([I/O operatörleri] 'de (http://perldoc.perl.org/perlop.html#I%2fO) -Operatörler)) daha dikkatli, '<> 'sihir kullanır gibi görünüyor. Burada '@ ARGV'yi değiştiren ilgili bir örnek var, ancak testimin' <> 'nin ilk örneği olduğunu veya '@ ARGV'nin değiştirilmesinin güvenli olduğunu garanti edeceğinden emin değilim. – bstpierre
Neden "local @ARGV = ...' kullanmaman gerektiğini anlamıyorum. – tchrist
@tchrist - Bu nasıl çalışır? – bstpierre