Aceasta este comanda perldlp care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS
PROGRAM:
NUME
perldl - Shell simplu pentru PDL (vezi și pdl2)
REZUMAT
Utilizați PDL în mod interactiv:
bash$ perldl
pdl> $a = secvenţă(10) # sau orice altă comandă perl sau PDL
bash$ pdl
pdl> print „Bună, lume!\n”;
Rulați un script:
bash$ cat > pdlscript
#!/usr/bin/pdl
printează „Bună, lume!\n”;
...
DESCRIERE
Programul perldl este un shell simplu (scris în perl) pentru utilizarea interactivă a PDL. Aceasta
constă dintr-o interfață de linie de comandă care acceptă interpretarea imediată a perl
comenzi și expresii. Pot fi introduse expresii Perl, inclusiv constructe PDL
direct la tastatură și sunt compilate și executate imediat. Sintaxa nu este
exact identic cu Perl, în sensul că în majoritatea circumstanțelor terminarea unei linii cauzează imediat
execuția comenzii introduse până acum (nu este necesar niciun „;” final).
Sinonimul PDL este un executabil compilat care este util ca interpret de script folosind UNIX
sintaxa shebang ("#!"). Acest lucru este util pentru generarea și re-executarea jurnalului de comandă
fișiere de la perldl.
perldl shell rulează un fișier inițial de pornire ("~/.perldlrc") care poate fi folosit pentru preîncărcare
modulele perl sau configurați mediul global perl. Dispune de un mecanism de cale pentru
încărcarea automată a subrutinelor perl. Există un mecanism de istoric al comenzilor și alte câteva
caracteristici utile, cum ar fi preprocesarea comenzilor, comenzi rapide pentru comenzile utilizate în mod obișnuit, cum ar fi
ca „print”, și capacitatea de a executa cod arbitrar ori de câte ori este tipărită un prompt.
În funcție de setările dvs. de configurare, perldl poate fi setat să onoreze sau să ignore ^D
(sfârșitul fișierului) atunci când este trimis de la un terminal sau pentru a încerca să facă lucrul corect
când se întâlnește o construcție bloc care se întinde pe mai multe linii.
perldl și PDL acceptă mai multe opțiuni de linie de comandă, care sunt discutate aproape de sfârșitul
acest document.
Referinţă manual & online ajutor
Manualul de referință PDL și ajutorul online sunt disponibile din interior perldl, folosind ajutor
și oportun comenzi (care pot fi și prescurtate ? și ??.) Cel ajutor comanda singur
tipărește un rezumat al sintaxei de ajutor și ajutor va tipări documentația POD de la
modulul pe care îl menționați (POD este formatul Perl pentru încorporarea documentației în perl
cod; vezi perlpod pentru detalii).
Dacă includeți documentația POD în subrutinele dvs. de încărcare automată (vezi cale mecanism de mai jos),
apoi amândoi ajutor și oportun îl va găsi și îl va putea formata și afișa la cerere.
Istorie mecanism
Dacă aveți instalate modulele perl ReadLines și ReadKeys, atunci perldl suportă a
istoric și mecanism de editare a liniilor folosind taste de editare similare cu emacs. Ultimele 500
comenzile sunt întotdeauna stocate în fișier .perldl_hist în directorul dvs. de acasă între
sesiuni. Setați $PERLDL::HISTFILESIZE pentru a modifica numărul de linii salvate. Comanda „l
[număr]” vă arată ultimele comenzi „număr” pe care le-ați tastat, unde „număr” este implicit 20.
de exemplu:
bash$ perldl
ReadLines activat
pdl> $a = rfits "foo.fits"
BITPIX = -32 dimensiune = 88504 pixeli
Citirea 354016 octeți
BSCALE = && BZERO =
pdl> jurnal imagini($a+400)
Se afișează imaginea de 299 x 296 de la 4.6939525604248 la 9.67116928100586...
Comandă execuție
Dacă introduceți o comandă simplă la perldl linia de comandă, este imediat executată într-un
Perl „eval()”. Mediul este aproape identic cu cel dintr-un script perl, cu
câteva excepții importante:
· $_ nu este păstrat peste linii
$_ este folosit pentru a menține linia de comandă pentru procesarea inițială, deci la începutul lui
procesarea fiecărei linii de comandă, $_ conține comanda în sine. Utilizați alte variabile
decât $_ pentru a stoca valori pe linii.
· Domeniul de aplicare nu este păstrat peste linii
Fiecare linie de comandă este executată într-un bloc „eval” separat în perl, deci scoping
comenzi precum „meu” și „local” pot să nu funcționeze exact așa cum era de așteptat -- în special,
dacă declarați o variabilă cu „my”, aceasta este locală pentru linia de comandă specială activată
pe care ai tastat comanda „meu”, ceea ce înseamnă că se va evapora înainte de următoarea
promptul este tipărit. (Puteți folosi variabilele „mei” într-un bloc cu mai multe linii sau pentru a izola
valori într-o singură linie de comandă, desigur).
NOTĂ: pdl2 păstrează domeniul lexical între linii.
· Executarea este imediată
În majoritatea cazurilor, de îndată ce încheiați o linie de intrare, linia este analizată și
executat. Acest lucru rupe dependența normală a lui Perl de punct și virgulă ca delimitatori de comandă.
De exemplu, expresia cu două linii
imprimați „Bună ziua”,
"lume";
afișează expresia „Hello world” în Perl, dar (în majoritatea circumstanțelor) „Hello” în
perldl.
· Execuție pe mai multe linii
În modul multilinie (care este activat implicit, vezi Coajă variabile, mai jos), perldl
caută căutări pentru constructe asemănătoare blocurilor cu acolade, paranteze, ghilimele,
și delimitatorii aferenti. Dacă lăsați o astfel de construcție deschisă, perldl acceptă mai multe rânduri
de intrare până când închideți constructul sau încheiați explicit expresia cu mai multe linii
^D. Urmând exemplul de mai sus, fraza
{ tipăriți „Bună ziua”,
"lume"; }
va imprima „Hello world” fie din Perl, fie (în modul cu mai multe linii) perldl.
avertizare: Analiza pe mai multe linii folosește modulul Text::Balanced al lui Damian Conway, care
conține unele defecte -- așa că poate fi păcălit de operatori ca ghilimele precum „q/.../”,
a inclus documentație POD, ghilimele cu mai multe rânduri „<<” și unele deosebit de bizare, dar-
potriviri valide „m/.../” și înlocuiri „s/.../.../”. În astfel de cazuri, utilizați ^D pentru a închide
scoateți construcția cu mai multe linii și forțați compilarea și execuția.
Dacă doriți să păstrați acest comportament într-un script (de exemplu, pentru a reda un jurnal de comandă
fişier; vedeți mai jos cum să creați unul), puteți utiliza PDL în loc de perl ca interpret
în linia shebang inițială a scenariului.
terminator "perldl"
O sesiune „perldl” poate fi încheiată cu oricare dintre comenzile „quit”, „exit” sau
stenografie „x” sau „q”. Dacă gestionarea EOF este activată (implicit), puteți de asemenea să tastați ^D
la promptul de comandă.
Dacă intrarea comenzii NU este un terminal (de exemplu, dacă rulați dintr-o comandă
fișier jurnal), atunci EOF se va termina întotdeauna perldl.
terminator comenzi (Ctrl-C manipulare)
Comenzile executate în „perldl” pot fi terminate prematur folosind „Ctrl-C” (sau
oricare dintre secvența de taste trimite un semnal INT procesului de pe terminalul dvs.). Cu condiția dvs
Codul PDL nu ignoră „sigint” acest lucru ar trebui să vă arunce înapoi la comanda „perldl”
prompt:
pdl> $rezultat = start_lengthy_computation()
Ctrl-C detectat
pdl>
Comenzi rapide și pseudonime
· Aliasurile shell „p” pentru a fi o formă scurtă convenabilă de „print”, de ex
pdl> p cele 5,3
[
[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]
]
· „q” și „x” sunt prescurtare pentru „renunți”.
· „l” listează memoria tampon de istorie
pdl> l # listează ultimele 20 de comenzi
pdl> l 40 # listează ultimele 40 de comenzi
· "?" este un alias pentru ajutor
pdl> ? pdl2 # obține ajutor pentru noul shell pdl2
· "???" este un alias pentru apropos
pdl> ?? PDL::Doc
· ajutor, apropos, utilizare și semn: toate cuvintele după aceste comenzi sunt folosite literal și nu
evaluat de perl. Deci puteți scrie, de exemplu,
pdl> ajutor ajutor
în loc de
pdl> ajutor „ajutor”
Linie de comanda Opțiuni
perldl și PDL acceptă mai multe opțiuni de linie de comandă pentru a ajusta comportamentul sesiunii.
Cele mai multe dintre ele sunt echivalente cu comenzile care pot fi introduse la pdl> prompt. Sunt:
-saturare
Încărcați OpenGL când porniți shell-ul (modulul perl OpenGL, care este disponibil de la
CPAN trebuie instalat). Acest lucru permite procesarea buclei de evenimente readline. Nu folosi cu
-tk.
-tk Încărcați Tk la pornirea shell-ului (modulul perl Tk, care este disponibil de la CPAN trebuie
fi instalat). Aceasta permite procesarea buclei de evenimente readline. Nu utilizați cu -glut.
-f fișier
Încarcă fișierul înainte de a procesa orice intrare de utilizator. Orice erori în timpul execuției
dosarele sunt fatale.
-w Rulează cu mesajele de avertizare (adică avertismentele normale "-w" perl) activate.
-Modul M
Încarcă modulul înainte de a procesa orice intrare de utilizator. Comparați „perl” corespunzător
intrerupator.
-m modul
Descarcă modulul înainte de a procesa orice intrare de utilizator.
- Directorul I
Adaugă un director la calea de includere. (adică matricea @INC) Comparați „perl” corespunzător
intrerupator.
-V Imprimă un rezumat al configurației PDL. Aceste informații ar trebui să fie incluse cu orice eroare PDL
raport. Comparați comutatorul „perl” corespunzător.
lansare fişier ~/.perldlrc
Dacă dosarul ~/.perldlrc se găsește că provine la pornire pentru a încărca module implicite, setate
variabile shell, etc. Dacă NU este găsit fișierul de distribuție PDL/default.perldlrc is
citeste in schimb. Aceasta încarcă diverse module considerate utile în mod implicit și care asigură
compatibilitate cu v1.11. Dacă nu vă place acest lucru și doriți un set mai eficient al dvs
propriile module preferate, creează-ți simplu ~/.perldlrc. Poate doriți să începeți de la
existent PDL/default.perldlrc ca șablon, deoarece nu va fi găsit după înlocuire
cu propria ta versiune.
Pentru a seta și mai multe valori implicite locale fișierul local.perldlrc (în directorul curent) este
provenit dacă este găsit. Aceasta vă permite să încărcați module și să definiți subrutine pentru proiect în
directorul curent.
Numele este ales în mod specific deoarece s-a găsit că fișierele ascunse NU erau dorite în acestea
circumstanțe.
Fișierul de pornire ar trebui să includă în mod normal „utilizați PDL::AutoLoader;”, la fel de multe dintre cele mai bune
caracteristicile interactive nu vor funcționa fără el.
Coajă variabile
Variabile Shell: (notițe: dacă nu vă plac valorile implicite, schimbați-le ~/.perldlrc)
· $PERLDL::ESCAPE - valoarea implicită „#”
Orice linie care începe cu acest caracter este tratată ca o shell escape. Valoarea implicită
este ales deoarece scapă codul din interpretul standard perl.
· $PERLDL::HISTFILESIZE - valoarea implicită 500
Acesta este numărul de linii din istoricul comenzilor shell perldl de păstrat.
· $PERLDL::PAGER - valoarea implicită „mai mult”
Program extern pentru filtrarea ieșirii comenzilor. Folosind „mai multe” imprimă rezultatul unu
ecranful la un moment dat. Pe Unix, setare pagină(1) și $PERLDL::PAGER la „tee -a outfile”
va păstra o înregistrare a rezultatelor generate de comenzile perldl ulterioare (fără
paginare).
· $PERLDL::PROMPT - valoarea implicită 'pdl> '
Destul spus Dar poate fi setat și la o referință de subrutină, de exemplu $PERLDL::PROMPT =
sub {join(':',(gmtime)[2,1,0]).'> '} pune ora curentă în prompt.
· $PERLDL::MULTI - valoarea implicită 1
Dacă aceasta este setată la o valoare adevărată, atunci perldl va analiza blocuri perl cu mai multe linii: your
intrarea nu va fi executată până când nu terminați o linie fără operatori de grup restante
(cum ar fi ghilimele, blocurile, parantezele sau parantezele) încă active. Linii de continuare
au un prompt diferit care vă arată ce delimitatori sunt încă activi.
Rețineți că acesta nu este (încă!) un parser perl complet. În special, Text::Balanced
pare să poată ignora operatorii de citare precum „q/ ... /” într-o linie, dar nu
pentru a le putea extinde peste linii. De asemenea, nu există suport pentru „<<”
operator.
Șirurile convenționale cu mai multe linii și grupările {}, [] și () sunt bine acceptate.
· $PERLDL::NO_EOF - valoarea implicită 0 / 1 pe MSWin32
Protejează împotriva utilizării accidentale a „^D” de la terminal. Dacă acest lucru este setat la adevărat
valoare, atunci nu puteți părăsi accidental perldl tastând „^D”. Dacă îl setați la a
valoare mai mare decât 1 (și PERLDL::MULTI este setat), atunci nu puteți folosi „^D” pentru a ieși
fie comenzi multilinie. Dacă trimiteți comenzi dintr-un fișier sau conductă, aceasta
variabila nu are efect.
· $HOME
Directorul principal al utilizatorului
· $PERLDL::TERM
Acesta este obiectul Term::ReadLine asociat cu shell-ul perldl. Poate fi folosit de
rutine apelate de la perldl dacă comanda dumneavoastră este interactivă.
· $PDL::toolongtoprint
Dimensiunea maximă a pdls de imprimat (implicit la 10,000 de elemente). Acesta nu este doar un
variabila „perldl” sau „pdl2”, dar este ceva care este de obicei necesar într-un
sesiune interactivă de depanare.
executare script-uri din il "perldl" prompt
Un mod util pentru dezvoltarea scripturilor perldl sau a funcțiilor de editare on-line este
pdl> # emacs script &
-- adăugați cod perldl la script și salvați fișierul
pdl> face "script"
-- înlocuiți editorul preferat bazat pe ferestre cu „emacs” (s-ar putea să fie necesar să schimbați
„&” pe sisteme non-Unix).
Rularea „do 'script'” actualizează din nou toate variabilele și definițiile funcției din
versiunea curentă a „scriptului”.
executare perldl script-uri din il comandă linie
Scripturile PDL sunt doar scripturi Perl care se întâmplă să folosească PDL (și posibil PDL::NiceSlice).
Dar pentru cei cu adevărat leneși, perldl poate fi invocat ca interpret de script. Pentru că perldl este
în sine un script Perl interpretat, majoritatea unice-urilor nu vă vor permite să spuneți „#!/usr/bin/perldl”
în partea de sus a scenariului dvs.
În schimb, spuneți „#!/usr/bin/pdl” și scriptul dvs. va fi executat exact ca și cum l-ați introduce,
linie cu linie, în shell-ul perldl.
Comandă preprocesare
NOTĂ: Această caracteristică este utilizată implicit de PDL::NiceSlice. Vezi mai jos pentru mai multe despre feliere
la promptul „perldl”.
În unele cazuri, este convenabil să procesați comenzile înainte ca acestea să fie trimise către perl for
execuţie. De exemplu, acesta este cazul în care coaja este prezentată oamenilor
nu sunt familiarizați cu perl, dar care doresc să profite de comenzile adăugate local (de ex. de
citând automat argumente la anumite comenzi).
*NOTĂ*: Interfața de preprocesare s-a schimbat față de versiunile anterioare! Vechiul mod de utilizare
$PERLDL::PREPROCESS va funcționa în continuare, dar este puternic depreciat și poate dispărea în
viitor.
Puteți activa preprocesarea înregistrând un filtru cu funcția „preproc_add”.
„preproc_add” ia un argument care este filtrul care trebuie instalat. Un filtru este un Perl
referință de cod (setat de obicei într-un fișier de configurare local) care va fi apelat, cu
șirul de comandă curent ca argument, chiar înainte ca șirul să fie executat de către shell.
Șirul modificat ar trebui returnat. Rețineți că puteți face „perldl” complet
inutilizabil dacă nu reușiți să returnați șirul modificat; renunțarea este atunci singura ta opțiune.
Filtrele pot fi eliminate din conducta de preprocesare apelând „preproc_del” cu
filtrul să fie eliminat ca argument. Pentru a afla dacă un filtru este instalat în prezent în
utilizarea conductei de preprocesare „preproc_registered”:
pdl> preproc_add $myfilter, cu excepția cazului în care preproc_registered $myfilter;
Versiunile anterioare de „perldl” au folosit variabila $PERLDL::PREPROCESS. Acest lucru va funcționa în continuare
dar trebuie evitat. Vă rugăm să vă schimbați scripturile pentru a utiliza funcțiile „preproc_add” etc.
Următorul cod ar verifica dacă există un apel la funcția „mysub” și argumentele cu paranteze
qw.
$filtru = preproc_add sub {
my $str = shift;
$str =~ s/^\s+//; # Eliminați spațiul de conducere
dacă ($str =~ /^mysub/) {
my ($comandă, $argumente) = split(/\s+/,$str, 2);
$str = "$comandă qw($argumente)"
if ($argumente definite && $argumente !~ /^qw/);
};
# Returnează șirul de intrare, modificat după cum este necesar
returnează $str;
};
Aceasta ar converti:
pdl> mysub arg1 arg2
la
pdl> mysub qw( arg1 arg2 )
pe care Perl o va înțelege ca o listă. Evident, este nevoie de puțin mai mult efort
verificați cazurile în care apelantul a furnizat o listă normală (și astfel nu necesită
este necesară cotarea automată) sau interpolarea variabilă.
Puteți elimina acest preprocesor folosind funcția „preproc_del” care ia un singur argument
(filtrul care trebuie eliminat, trebuie să fie același cod care a fost returnat de la un
apel „preproc_add”):
pdl> preproc_del $filtru;
Un exemplu de utilizare reală poate fi găsit în scriptul „perldl”. Uită-te la funcția
„trans” pentru a vedea cum este activat/dezactivat preprocesorul Niceslicing.
"perldl" și PDL::NiceSlice
PDL::NiceSlice introduce o sintaxă de feliere mai convenabilă pentru piddles. În curs
versiunile de niceslicing „perldl” și „pdl2” sunt activate în mod implicit (dacă CPAN-ul necesar
modulele sunt instalate pe mașina dvs.).
La pornire, „perldl” vă va anunța dacă Niceslicing este activat. Mesajul de pornire va
conțin informații în acest scop, ceva de genul acesta:
perlDL shell v1.XX
PDL vine cu ABSOLUT NU GARANTIE. Pentru detalii, consultați fișierul
„COPIERE” în distribuția PDL. Acesta este software gratuit și tu
sunt bineveniți să-l redistribuiți în anumite condiții, vezi
același fișier pentru detalii.
ReadLines, NiceSlice activat
Se citesc /home/csoelle/.perldlrc...
Tastați „demo” pentru demonstrații online
PDL încărcat v2.XX
Când primiți un astfel de mesaj care indică că „NiceSlice” este activat, puteți utiliza opțiunea îmbunătățită
sintaxa de tăiere:
pdl> $a = secvența 10;
pdl> p $a(3:8:2)
Pentru detalii consultati PDL::NiceSlice.
PDL::NiceSlice instalează un filtru în conducta de preprocesare (vezi mai sus) pentru a activa
sintaxă îmbunătățită de tăiere. Puteți folosi câteva comenzi în shell-ul „perldl” pentru a schimba acest lucru
activarea sau dezactivarea preprocesării și, de asemenea, verificați în mod explicit înlocuirile pe care NiceSlice
filtrul face.
Puteți activa și dezactiva filtrul PDL::NiceSlice tastând
pdl> trans # porniți niceslicing
și
pdl> notrans # dezactivați niceslicing
respectiv. Filtrul este activat implicit.
Pentru a vedea cum sunt traduse comenzile dvs. comutați raportarea pe:
pdl> raport 1;
pdl> p $a(3:8:2)
procesat p $a->nslice([3,8,2])
[3 5 7]
În mod similar, dezactivați raportarea după cum este necesar
pdl> raport 0;
pdl> p $a(3:8:2)
[3 5 7]
Raportarea este dezactivată în mod implicit.
Automat a executa ta propriu cârlige
Variabila @PERLDL::AUTO este o listă simplă de șiruri de coduri perl și/sau referință de cod. Aceasta
este folosit pentru a defini codul care urmează să fie executat automat de fiecare dată când utilizatorul introduce o nouă linie.
Un exemplu simplu ar fi să tipăriți ora fiecărei comenzi:
pdl> push @PERLDL::AUTO,'print scalar(gmtime),"\n"'
pdl> print zerouri(3,3)
Duminica 3 mai 04:49:05 1998
[
[0 0 0]
[0 0 0]
[0 0 0]
]
pdl> print "Boo"
Duminica 3 mai 04:49:18 1998
Boo
pdl>
Sau pentru a vă asigura că orice modificări în fișierul „local.perldlrc” sunt întotdeauna preluate:-
pdl> push @PERLDL::AUTO,"do 'local.perldlrc'"
Acest cod poate fi pus, desigur, *în* 'local.perldlrc', dar aveți grijă :-) [Sugestie: adăugați
„cu excepția cazului în care ($started++)” de mai sus pentru a vă asigura că se face o singură dată!]
Un alt exemplu de aplicație este un cârlig pentru încărcătoare automate (de exemplu, PDL::AutoLoader) de adăugat
de asemenea, care le permite să rescaneze automat fișierele pentru modificări. Aceasta este
extrem de convenabil la linia de comandă interactivă. Deoarece acest cârlig este doar în coajă
nu impune nicio ineficiență scripturilor PDL.
În cele din urmă, rețineți că aceasta este o facilitate foarte puternică - ceea ce înseamnă că ar trebui folosită cu
prudență!
Utilizați perldlp online folosind serviciile onworks.net