Perl 용 대화식 콘솔을 시작하려면 어떻게해야합니까?


답변:


297

다음과 같이 간단한 프로그램에서 perl 디버거를 사용할 수 있습니다.

perl -de1

또는 Alexis Sukrieh 의 Perl Console 응용 프로그램이 있지만 사용하지 않았습니다.


27
사용 가능한 추가 고려하면 minimimaly 무언가를 원하는 경우에 rlwrap $ rlwrap perl -d -e 1 당신은 역사와 일관된 메시지를 얻을 것
albfan

control+ L이 명령 인터페이스에서 작동하지 않습니다. 화면을 어떻게 새로 고쳐야합니까?
Zen

1
가늠자의 이점으로 : Ján Sáreník의 대답 은 거의 모든 상자에서 가장 좋은 솔루션을 제공하는 것 같습니다 (설치해야 할 수도 있음 rlwrap). 을 (를) 포함한 모든 타사 REPL / 콘솔 솔루션 perlconsole은 설치하기에 번거롭고 더 많은 제한 사항이 있습니다.
mklement0

3
불행히도 변수 perl -de1를 지원하지 않는 것으로 보이며 my해시가 어떤 이유로 든 작동하지 않습니다…
Geremia

1
perlconsole이러한 문제로 고통받지 않습니다.
Geremia

60

Matt Trout은 REPL에 관한 기사를 썼을뿐만 아니라 실제로는 한 권을 썼습니다 -Devel :: REPL

나는 그것을 조금 사용했고 꽤 잘 작동하며 활발한 개발 중입니다.

BTW, 나는 왜 누군가 콘솔에서 "perl -e"를 사용한다고 언급 한 사람을 수정했는지 모른다. 이것은 실제로는 REPL이 아니지만 환상적으로 유용하며 항상 사용합니다.


나는 그 질문을 이해하지 못했다고 생각합니다. 조금 편집하겠습니다. ;-)
Jon Ericson

2015 년 중반 : [sudo] cpan Devel::REPLOSX 10.10 (Perl 5.18.2) 또는 Ubuntu 14.04 (Perl 5.18.2)에서는 단순히 실행 이 작동하지 않았습니다. 모듈 누락에 대해 불평하는 런타임 오류가 발생합니다. 누락 된 다른 모듈이보고 된 후 포기했습니다.
mklement0

@ mklement0 필수 구성 요소 모듈을 자동으로 다운로드하고 빌드하기위한 cpan 설정이 있습니다. 해당 설정을 켜야 할 수도 있습니다. 또는 zero-config cpanminus 응용 프로그램이 더 나은 옵션 일 수 있습니다.
불가사리

@Starfish : 감사합니다; 향후 독자의 시간을 절약하기 위해 (답이 짧을 수 있으므로)이 설정을 어떻게 설정합니까?
mklement0

1
그건 그렇고, 저자 인 Matt Trout re.pl는 몇 가지 대안을 제시하는 기사를 작성했으며 reply대신 re.pl다음 을 대신 사용할 것을 제안합니다 . shadow.cat/blog/matt-s-trout/mstpan-17
Denilson Sá Maia

36

"psh"라고하는 스크립트를 작성했습니다.

#! /usr/bin/perl

while (<>) {
  chomp;
  my $result = eval;
  print "$_ = $result\n";
}

입력 한 내용이 무엇이든 Perl로 평가됩니다.

> gmtime(2**30)
gmtime(2**30) = Sat Jan 10 13:37:04 2004

> $x = 'foo'
$x = 'foo' = foo

> $x =~ s/o/a/g
$x =~ s/o/a/g = 2

> $x
$x = faa

4
이것은 하나의 라이너에서만 작동합니까? 조건부 분기, 루프, 중첩 문과 같은 여러 줄 Perl 코드를 처리 할 수 ​​있습니까?
David

23

히스토리를 원하면 rlwrap을 사용 하십시오 . 이것은 당신이 될 수있는 ~/bin/ips예를 들어 :

#!/bin/sh
echo 'This is Interactive Perl shell'
rlwrap -A -pgreen -S"perl> " perl -wnE'say eval()//$@'

그리고 이것은 다음과 같이 보입니다 :

$ ips
This is Interactive Perl shell
perl> 2**128
3.40282366920938e+38
perl> 

4
멋지게 정리할 필요가있다-히스토리뿐만 아니라 커맨드 라인을 편집하기 위해서도 readline 지원이 필요하다. 여러 줄 지원을 제외하고는 잘 작동합니다. 대안으로 다음과 같은 별칭 버전이 alias iperl='rlwrap -A -S "perl> " perl -wnE '\''say eval()//$@'\'있습니다.. OSX 사용자는 rlwrapHomebrew 를 통해 설치할 수 있습니다 brew install rlwrap.
mklement0

다음은 표현식이 목록이나 참조로 평가 될 때 좋은 결과를 제공하는 버전입니다.rlwrap -A -pgreen -S'perl> ' perl -MData::Dumper -wnE'say Dumper[eval()]//$@'
michau

21

펄에 대한 REPL (읽기, 평가, 인쇄, 루프) 인터페이스에 대해 묻는 것 같습니다. 이를 수행하는 몇 가지 방법이 있습니다.

  • 맷 송어에는 기사가 있습니다 을 쓰는 방법을 설명하는 가 있습니다.
  • Adriano Ferreira 가 몇 가지 옵션을 설명했습니다
  • 마지막으로 irc.perl.org에서 IRC를 타고 많은 인기 채널에서 평가판 봇 중 하나를 시험해 볼 수 있습니다. 그들은 당신이 그들에게 전달하는 펄 덩어리를 평가합니다.

1
: 매트 송어의 기사는 여기에서 찾을 수 있습니다, 몇 년 전부터 내려왔다 web.archive.org/web/20100212100032/http://chainsawblues.vox.com/...
레페

1
Matt Trout는 이제 그가 추천하는 REPL 목록을 훨씬 더 많이 가지고 있습니다 : shadow.cat/blog/matt-s-trout/mstpan-17
Davor Cubranic

20

명령 줄을 콘솔로 사용합니다.

$ perl -e 'print "JAPH\n"'

그런 다음 bash 기록을 사용 하여 이전 명령을 다시 가져올 수 있습니다 . 그러나 이것은 상태를 보존하지 않습니다.

이 양식은 "한가지 작은 것"을 테스트 할 때 가장 유용합니다 (Perl 질문에 대답 할 때와 같이). 종종 이러한 명령이 셸 스크립트 또는 makefile에 그대로 스크랩됩니다.


1
와 같은 일부 셸을 사용하면 fish조차 필요하지 않습니다 \n.
trysis

15

Python처럼 내장 된 Perl 용 대화식 콘솔은 없습니다. 그러나 Perl Debugger를 사용하여 디버깅 관련 작업을 수행 할 수 있습니다. -d 옵션을 사용하여 켤 수 있지만 'man perldebug'를 확인하여 배울 수 있습니다.

약간의 인터넷 검색 후에는 Perl 콘솔을 구현하는 별도의 프로젝트가 있습니다. http://www.sukria.net/perlconsole.html .

도움이 되었기를 바랍니다!


이 답변은 승인 된 답변보다 빠르지 만 조금 더 많은 정보를 제공하더라도이 투표에 응답 한 내용이 없습니다. +1
Junuxx


13

인기있는 Perl REPL은 두 가지가 있습니다.

  1. Devel :: REPL 은 훌륭합니다.
  2. 그러나 IMO 회신 이 더 좋습니다.

7
답장 추천 +1 Devel :: REPL의 저자는 IRC에서 좋은 Perl REPL (콘솔)에 대해 질문 할 때 자체 솔루션보다 답장을 추천했습니다. 응답에는 객체의 사용 가능한 메소드 및 속성을 검사하는 데 매우 유용한 자동 완성 기능도 있습니다. 다음 명령으로 Ubuntu에 회신을 설치할 수 sudo apt-get install libreply-perl있습니다. 그러면 reply터미널에 간단히 입력하여 실행할 수 있습니다 .
Apteryx

amd run Reply를 어떻게 설치합니까? Metacpan이나 Github 페이지는 지침을 제공하지 않습니다.
Philippe

12

Linux, macOS 및 Windows에서 실행 perli되는 Perl REPL 을 만들었습니다 .

자동 결과 인쇄, 편리한 문서 조회 및 정규식 일치에 대한 쉬운 검사에 중점을 둡니다. 여기에서
스크린 샷을 볼 수 있습니다 .

독립형으로 작동 하지만 (Perl 이외의 종속성은 없지만) 명령 줄 편집, 영구 명령 기록 및 탭 완성을 지원하려면 설치를 rlwrap적극 권장 합니다 .

설치

  • Node.js를 설치 한 경우 :

    npm install -g perli
  • 그렇지 않으면:

    • 유닉스 계열 플랫폼 : 이 스크립트perli시스템 경로의 폴더 로 다운로드 하고로 실행 가능하게 만드십시오 chmod +x.

    • 윈도우 : 다운로드 이 스크립트perli.pl(참고 .pl시스템의 경로에 폴더 확장).
      Perli를로 호출하지 않아도되면 perli.pl모든 준비가 완료된 것입니다.
      그렇지 않으면 perli.cmd다음 내용으로 동일한 폴더에 이름이 지정된 배치 파일을 작성하십시오 . @%~dpn.pl %*; 이것은 단지 호출을 가능하게 perli합니다.


1
나는 그것을 실행할 수 있습니다 좋아 perldoc에서 perli와 같이 REPL 'someCommand ?'. 한동안 업데이트되지 않은 것 같습니다. 여전히 perli를 유지하고 있습니까?
sdkks

1
@ sdkks : 문제를 발견하면 GitHub 에보 고하고 문제 를 해결하려고합니다. perli개인적으로 사용하는 동안 어떤 문제도 겪지 않았기 때문에 한동안 업데이트되지 않았습니다. 다른 사람은 거의 사용하지 않는 것 같습니다. 그러나 아는 한, 여전히 광고 된대로 작동합니다.
mklement0

7

나는 항상했다 :

rlwrap perl -wlne'eval;print$@if$@'

5.10에서는 다음으로 전환했습니다.

rlwrap perl -wnE'say eval()//$@'

(rlwrap은 선택 사항입니다)



6

Devel :: REPL에서 re.pl


5

읽기 평가 인쇄 루프 :

$ perl -e'while(<>){print eval,"\n"}'

4

Perl에는 콘솔이 없지만 디버거를 콘솔로 사용할 수 있습니다. 명령 프롬프트에서을 입력하십시오 perl -de 1. 값 "1"은 중요하지 않으며 아무 것도하지 않는 유효한 명령문 일뿐입니다.

Perl 쉘 에는 몇 가지 옵션이 있습니다 .

자세한 정보는 perlfaq3을 읽으 십시오 .


4

당신은 여기에 psh를 볼 수 있습니다 : http://gnp.github.io/psh/

쉘에 가득 차 있지만 (예를 들어 bash 대신 사용할 수 있음) perl 구문을 사용합니다. 따라서 즉시 메소드를 작성할 수 있습니다.


3

데비안 / 우분투에서 :

$ sudo apt-get install libdevel-repl-perl
$ re.pl

$ sudo apt-get install libapp-repl-perl
$ iperl

3

매트 송어의 개요 목록 오 개에서 선택, perl -de 0이후, 그는 권장 Reply플러그인을 통해 확장 성이 중요한 경우, 또는, tinyrepl에서 Eval::WithLexicals의 readline 지원 및 어휘 지속성을 포함하는 최소한의, 순수 펄 솔루션.


2

업데이트 : 이후 다운로드 가능한 REPL을 만들었습니다 . 다른 답변을 참조하십시오 .

후시의 이점으로 :

  • 타사 솔루션을 기존의 답변 중 언급 중 하나입니다 설치하는 성가신 및 / 또는 비 사소한 아닌 명백한 추가 단계없이 일을하지 않습니다 - 일부 솔루션 것으로 보인다 적어도 반 포기했다.
  • 사용 가능한 REPL에는 명령 줄 편집 키보드 지원 및 기록 지원을위한 readline 라이브러리가 필요합니다. 이는 많은 타사 솔루션에서 문제가되는 부분입니다.
  • CLI를 설치 하여 명령에 대한 읽기 라인 지원을 제공하는 경우 CLI를 rlwrap간단한 Perl 명령과 결합하여 사용 가능한 REPL을 작성할 수 있습니다 써드 파티 REPL 솔루션없이 수행 할 수 있습니다.
    • OSX 에서을 사용 rlwrap하여 Homebrew 를 통해 설치할 수 있습니다 brew install rlwrap.
    • Linux 배포판은 rlwrap해당 패키지 관리자를 통해 제공해야합니다 . 예를 들어 우분투에서는을 사용하십시오 sudo apt-get install rlwrap.
    • 상기의 조합 과 Perl 명령에 대해서는 Ján Sáreník의 답변 을 참조하십시오 rlwrap.

Ján의 답변으로 얻을 수없는 것 :

  • 자동 완성
  • 여러 줄로 된 문장을 입력하는 기능

이러한 기능을 제공하는 유일한 타사 솔루션 (사소한 설치 + 추가의 명백한 단계 포함)은 psh 이지만 다음과 같습니다.

  • 약 2.5 년 동안 활동을 보지 못했습니다.

  • 초점은 본격적인 될 것을 목표로 점에서 다른 쉘 교체 , 따라서이 자동으로 명령을 평가하지 않는다는 것을 의미 전통적인 쉘처럼 작동 문을, 그리고 같은 명시 적으로 출력 명령을 필요 print로 식의 결과를 인쇄합니다.


Ján Sáreník의 답변 은 한 가지 방법으로 향상 될 수 있습니다.

  • 기본적으로 배열 / 목록 / 해시 테이블을 스칼라로 인쇄합니다. 즉, 요소 수 만 인쇄 하지만 대신 요소를 열거하는 것이 편리합니다.

일회성 작업으로 Data::Printer모듈 을 설치하는 경우 열거 형으로 목록 / 배열 / 해시 테이블을 전달할 수[sudo] cpan Data::Printer 있는 기능 을 사용하기 위해 REPL에 모듈을 로드 p()할 수 있습니다.

여기의 이름이 별명 iperl의 readline와 함께 Data::Printer지원 당신이 넣을 수 있습니다, 당신의 POSIX와 같은 쉘의 초기화 파일 (예 : ~/.bashrc) :

alias iperl='rlwrap -A -S "iperl> " perl -MData::Printer -wnE '\''BEGIN { say "# Use `p @<arrayOrList>` or `p %<hashTable>` to print arrays/lists/hashtables; e.g.: `p %ENV`"; } say eval()//$@'\'

예를 들어, 다음을 수행하여 해시 테이블을 통해 모든 환경 변수를 인쇄 할 수 있습니다 %ENV.

$ iperl        # start the REPL
iperl> p %ENV  # print key-value pairs in hashtable %ENV

Ján의 답변과 마찬가지로 표현식 의 스칼라 결과는 자동으로 인쇄됩니다. 예 :

iperl> 22 / 7  # automatically print scalar result of expression: 3.14285714285714


0

세피아와 PDE에는 자체 REPL도 있습니다 (GNU Emacs 용).



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.