Perl의 STDIN 또는 입력 파일에서 프로그래밍 방식으로 읽기
Perl에서 stdin 또는 입력 파일 (제공된 경우)에서 프로그래밍 방식으로 읽는 가장 매끄러운 방법은 무엇입니까?
while (<>) {
print;
}
명령 줄에 지정된 파일에서 읽거나 파일이 지정되지 않은 경우 stdin에서 읽습니다.
명령 줄에서이 루프 구성이 필요한 경우 다음 -n
옵션을 사용할 수 있습니다 .
$ perl -ne 'print;'
여기에 {}
첫 번째 예제 ''
에서 두 번째 예제 사이에 코드 를 넣 습니다.
이것은 작업 할 명명 된 변수를 제공합니다.
foreach my $line ( <STDIN> ) {
chomp( $line );
print "$line\n";
}
파일을 읽으려면 다음과 같이 파이프하십시오.
program.pl < inputfile
특정 상황에서 "가장 매끄러운"방법은 -n
스위치를 활용하는 것입니다 . 코드를 while(<>)
루프로 암시 적으로 래핑 하고 입력을 유연하게 처리합니다.
에서 slickestWay.pl
:
#! / usr / bin / perl -n 시작 : { # 여기서 한 번만 } # 한 줄의 입력에 대한 로직 구현 $ result 인쇄;
명령 줄에서 :
chmod +x slickestWay.pl
이제 입력에 따라 다음 중 하나를 수행하십시오.
사용자 입력을 기다립니다
./slickestWay.pl
인수로 명명 된 파일에서 읽기 (재 지정 필요 없음)
./slickestWay.pl input.txt ./slickestWay.pl input.txt moreInput.txt
파이프 사용
someOtherScript | ./slickestWay.pl
이 BEGIN
블록은 Text :: CSV와 같은 객체 지향 인터페이스를 초기화해야하는 경우에 필요하며 -M
.
-l
그리고 -p
또한 당신의 친구입니다.
<> 연산자를 사용해야합니다.
while (<>) {
print $_; # or simply "print;"
}
다음과 같이 압축 할 수 있습니다.
print while (<>);
임의 파일 :
open F, "<file.txt" or die $!;
while (<F>) {
print $_;
}
close F;
If there is a reason you can't use the simple solution provided by ennuikiller above, then you will have to use Typeglobs to manipulate file handles. This is way more work. This example copies from the file in $ARGV[0]
to that in $ARGV[1]
. It defaults to STDIN
and STDOUT
respectively if files are not specified.
use English;
my $in;
my $out;
if ($#ARGV >= 0){
unless (open($in, "<", $ARGV[0])){
die "could not open $ARGV[0] for reading.";
}
}
else {
$in = *STDIN;
}
if ($#ARGV >= 1){
unless (open($out, ">", $ARGV[1])){
die "could not open $ARGV[1] for writing.";
}
}
else {
$out = *STDOUT;
}
while ($_ = <$in>){
$out->print($_);
}
Do
$userinput = <STDIN>; #read stdin and put it in $userinput
chomp ($userinput); #cut the return / line feed character
if you want to read just one line
Here is how I made a script that could take either command line inputs or have a text file redirected.
if ($#ARGV < 1) {
@ARGV = ();
@ARGV = <>;
chomp(@ARGV);
}
This will reassign the contents of the file to @ARGV, from there you just process @ARGV as if someone was including command line options.
WARNING
If no file is redirected, the program will sit their idle because it is waiting for input from STDIN.
I have not figured out a way to detect if a file is being redirected in yet to eliminate the STDIN issue.
if(my $file = shift) { # if file is specified, read from that
open(my $fh, '<', $file) or die($!);
while(my $line = <$fh>) {
print $line;
}
}
else { # otherwise, read from STDIN
print while(<>);
}
참고URL : https://stackoverflow.com/questions/3138649/programmatically-read-from-stdin-or-input-file-in-perl
'developer tip' 카테고리의 다른 글
내 우분투 도커 이미지에 "ifconfig"명령을 설치하는 방법은 무엇입니까? (0) | 2020.11.13 |
---|---|
Android WebView 진행률 표시 줄 (0) | 2020.11.13 |
엔티티를 읽기 전용으로 만드는 방법은 무엇입니까? (0) | 2020.11.13 |
Android x86 화면 해상도 전환 (0) | 2020.11.13 |
자바 스크립트에서 문자열의 줄 수를 계산하는 방법 (0) | 2020.11.13 |