คำถามติดแท็ก perl

Perl เป็นภาษาโปรแกรมเชิงพลวัตขั้นสูงและมีวัตถุประสงค์ทั่วไปซึ่งเป็นที่รู้จักกันดีในเรื่องการสนับสนุนการแสดงออกปกติและความสามารถในการวิเคราะห์สตริง โปรดใช้แท็กนี้สำหรับคำถามเกี่ยวกับ Perl โดยทั่วไป สำหรับสิ่งต่าง ๆ ที่เกี่ยวข้องกับภาษาใหม่ (แต่เกี่ยวข้อง) Raku (เดิมชื่อ "Perl 6") โปรดใช้แท็ก raku สำหรับนิพจน์ทั่วไปสไตล์ Perl ในภาษาอื่น ๆ ให้ใช้แท็ก regex หรือหากเป็นไปตามไลบรารี PCRE แท็ก pcre

29
ฉันจะรับรายการโมดูล CPAN ที่ติดตั้งได้อย่างไร
นอกเหนือจากการพยายาม perldoc <module name> เป็นรายบุคคลสำหรับโมดูล CPAN ใด ๆ ที่ใช้จินตนาการของฉันหรือผ่านระบบไฟล์และดูที่ไดเร็กทอรีฉันไม่รู้ว่าเราติดตั้งโมดูลอะไร วิธีใดที่ง่ายที่สุดในการรับรายการโมดูล CPAN ทั้งหมดที่ติดตั้งไว้ จากบรรทัดคำสั่งหรืออย่างอื่น
90 perl  cpan 

2
ใน Perl ไฟล์. pm (Perl module) กับ .pl (Perl script) ต่างกันอย่างไร
อะไรคือความแตกต่างระหว่าง.pm(Perl module) และ.pl(Perl script) ไฟล์? กรุณาบอกเหตุผลที่เรากลับ1จากไฟล์ ถ้าส่งคืน 2 หรืออย่างอื่นมันไม่ได้สร้างข้อผิดพลาดใด ๆ แล้วทำไมเราถึงกลับ1จากโมดูล Perl?
88 perl  perl-module 

15
วิธีคำนวณค่าเบี่ยงเบนมาตรฐานที่กำลังทำงานอยู่อย่างมีประสิทธิภาพ?
ฉันมีรายการตัวเลขมากมายเช่น: [0] (0.01, 0.01, 0.02, 0.04, 0.03) [1] (0.00, 0.02, 0.02, 0.03, 0.02) [2] (0.01, 0.02, 0.02, 0.03, 0.02) ... [n] (0.01, 0.00, 0.01, 0.05, 0.03) สิ่งที่ฉันต้องการทำคือคำนวณค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานอย่างมีประสิทธิภาพที่ดัชนีแต่ละรายการในองค์ประกอบอาร์เรย์ทั้งหมด ในการหาค่าเฉลี่ยฉันได้วนลูปผ่านอาร์เรย์และรวมค่าในดัชนีที่กำหนดของรายการ ในตอนท้ายฉันหารค่าแต่ละค่าใน "รายการค่าเฉลี่ย" ด้วยn(ฉันกำลังทำงานกับประชากรไม่ใช่ตัวอย่างจากประชากร) ในการหาค่าเบี่ยงเบนมาตรฐานฉันวนซ้ำอีกครั้งตอนนี้ฉันมีค่าเฉลี่ยที่คำนวณแล้ว ฉันต้องการหลีกเลี่ยงการผ่านอาร์เรย์สองครั้งหนึ่งครั้งสำหรับค่าเฉลี่ยและหนึ่งครั้งสำหรับ SD (หลังจากที่ฉันมีค่าเฉลี่ย) มีวิธีที่มีประสิทธิภาพในการคำนวณทั้งสองค่าโดยผ่านอาร์เรย์เพียงครั้งเดียวหรือไม่? โค้ดใด ๆ ในภาษาที่ตีความ (เช่น Perl หรือ Python) หรือรหัสเทียมก็ใช้ได้

6
การใช้ 'use utf8;' ให้ฉัน 'ตัวอักษรกว้างในการพิมพ์'
หากฉันเรียกใช้โปรแกรม Perl ต่อไปนี้: perl -e 'use utf8; print "鸡\n";' ฉันได้รับคำเตือนนี้: Wide character in print at -e line 1. ถ้าฉันเรียกใช้โปรแกรม Perl นี้: perl -e 'print "鸡\n";' ฉันไม่ได้รับคำเตือน ฉันคิดว่าuse utf8จำเป็นต้องใช้อักขระ UTF-8 ในสคริปต์ Perl เหตุใดจึงไม่ได้ผลและฉันจะแก้ไขได้อย่างไร ฉันใช้ Perl 5.16.2 ฉันมีปัญหาเดียวกันหากสิ่งนี้อยู่ในไฟล์แทนที่จะเป็นซับในบรรทัดคำสั่ง
86 perl  unicode  utf-8 

5
Perl build, unit testing, code coverage: ตัวอย่างการทำงานที่สมบูรณ์
คำตอบ Stackoverflow ส่วนใหญ่ที่ฉันพบเกี่ยวกับกระบวนการสร้าง Perl และการทดสอบหน่วยและการครอบคลุมโค้ดเพียงแค่ชี้ให้ฉันไปที่ CPAN เพื่อดูเอกสารที่นั่น ไม่มีอะไรผิดปกติในการชี้ไปที่โมดูล CPAN เพราะนั่นคือที่ที่เอกสารฉบับเต็มควรจะอยู่ ฉันมีปัญหาในการค้นหาตัวอย่างโค้ดการทำงานที่สมบูรณ์ในหลาย ๆ กรณี ฉันได้ค้นหาทั่วอินเทอร์เน็ตเพื่อหาตัวอย่างโค้ดที่ใช้งานได้จริงซึ่งฉันสามารถดาวน์โหลดหรือวางลงใน IDE ของฉันได้เช่นซอร์สโค้ดตัวอย่าง "Hello World" ของบทช่วยสอนทั่วไปของคุณ แต่เป็นตัวอย่างที่แสดงให้เห็นถึงกระบวนการสร้างด้วยการทดสอบหน่วยและโค้ด การวิเคราะห์ความครอบคลุม ใครมีตัวอย่างเล็ก ๆ ของโครงการทำงานที่แสดงให้เห็นถึงเทคโนโลยีและกระบวนการเหล่านี้หรือไม่? (ฉันมีตัวอย่างการทำงานเล็กน้อยและฉันจะตอบคำถามของตัวเองด้วย แต่อาจมีผู้ใช้ SO รายอื่นที่มีตัวอย่างที่ดีกว่าตัวอย่างที่ฉันคิดขึ้นมา)

9
ฉันจะแปลงสตริงเป็นตัวเลขใน Perl ได้อย่างไร
ฉันมีสตริงที่มีค่าทศนิยมและฉันต้องแปลงสตริงนั้นเป็นตัวแปรทศนิยม ตัวอย่างของสตริงที่ฉันมีคือ "5.45" และฉันต้องการค่าทศนิยมเพื่อที่ฉันจะได้เพิ่ม. 1 เข้าไป ฉันได้ค้นหาในอินเทอร์เน็ต แต่ฉันเห็นเพียงวิธีการแปลงสตริงเป็นจำนวนเต็ม

1
เหตุใดฉันจึงไม่ได้รับข้อผิดพลาดทางไวยากรณ์เมื่อฉันรันสคริปต์ Python ด้วย Perl
ฉันเพิ่งเขียนโค้ดทดสอบ python ลงไปtest.pyและฉันจะเปิดใช้งานดังต่อไปนี้: perl test.py หลังจากนั้นไม่นานฉันก็ตระหนักถึงความผิดพลาดของฉัน ฉันพูดว่า "หลังจากนั้นสักครู่" เนื่องจากโค้ด Python ได้รับการดำเนินการอย่างถูกต้องจริง ๆ ราวกับว่าในล่าม Python! เหตุใด Perl ของฉันจึงตีความ Python ของฉัน test.pyมีลักษณะดังนี้: #!/usr/bin/python ...Python code here... น่าสนใจถ้าฉันทำตรงกันข้าม (เช่นโทรpython something.pl) ฉันจะได้รับข้อผิดพลาดทางไวยากรณ์จำนวนมาก
85 python  perl 

7
เขียนทับฟังก์ชันที่กำหนดในโมดูล แต่ก่อนที่จะใช้ในเฟสรันไทม์?
ลองทำอะไรที่ง่ายมาก # Foo.pm package Foo { my $baz = bar(); sub bar { 42 }; ## Overwrite this print $baz; ## Before this is executed } มีอยู่หรือไม่ที่ฉันสามารถtest.plเรียกใช้โค้ดที่เปลี่ยนแปลงสิ่งที่$bazตั้งไว้และทำให้Foo.pmพิมพ์อย่างอื่นบนหน้าจอได้ # maybe something here. use Foo; # maybe something here เป็นไปได้ไหมที่คอมไพเลอร์เฟสจะบังคับให้พิมพ์ด้านบน7?
20 perl  compilation 

2
ทำไมผู้ใช้บางคนพูดชื่อคลาสใน Perl?
มองไปที่Type::Tinyฉันเห็นว่าชื่อชั้นในการโทรไปยังType::Tiny->newอ้างถึงในเอกสารอย่างเป็นทางการ my $NUM = "Type::Tiny"->new( name => "Number", constraint => sub { looks_like_number($_) }, message => sub { "$_ ain't a number" }, ); ทำไมนี้ สไตล์นี้เป็นเพียง? มีผลการปฏิบัติงานสำหรับการฝึกฝนนี้ไหม?

2
วิธีที่ดีที่สุด (ตามลำดับ) ที่จะล้มเหลวสคริปต์ Perl (ทำงานด้วย -n / -p) เมื่อไม่พบไฟล์อินพุต?
$ perl -pe 1 foo && echo ok Can't open foo: No such file or directory. ok ฉันต้องการให้สคริปต์ perl ล้มเหลวเมื่อไม่มีไฟล์อยู่ วิธี "เหมาะสม" ในการทำให้ -p หรือ -n ล้มเหลวเมื่อไม่มีไฟล์อินพุตอยู่
11 perl 

2
Glob ของ Perl มีข้อ จำกัด หรือไม่?
ฉันกำลังเรียกใช้สตริงส่งคืนที่คาดหวัง 5 ตัวอักษรต่อไปนี้: while (glob '{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}'x5) { print "$_\n"; } แต่จะส่งกลับเพียง 4 ตัวอักษร: anbc anbd anbe anbf anbg ... อย่างไรก็ตามเมื่อฉันลดจำนวนตัวละครในรายการ: while (glob '{a,b,c,d,e,f,g,h,i,j,k,l,m}'x5) { print "$_\n"; } มันกลับมาอย่างถูกต้อง: aamid aamie aamif aamig aamih ... ใครช่วยกรุณาบอกฉันว่าฉันหายไปที่นี่มีข้อ จำกัด บางอย่าง? หรือมีวิธีแก้ไขปัญหานี้หรือไม่? หากมันสร้างความแตกต่างก็จะส่งกลับผลลัพธ์เดียวกันทั้งperl 5.26และperl 5.28
9 perl 

2
ติดตั้ง Raku (Perl 6) ใน Ubuntu พร้อมกับ Perl 5.26
ฉันกระตือรือร้นที่จะเรียนรู้ Raku (Perl 6) และไวยากรณ์ของมัน ฉันได้ติดตั้ง Perl 5 ไว้ในเครื่อง Ubuntu แล้ว vinod@ubuntu-s-1vcpu-1gb-nyc1-01:~$ perl -v This is perl 5, version 26, subversion 1 (v5.26.1) built for x86_64-linux-gnu-thread-multi (with 67 registered patches, see perl -V for more detail) Copyright 1987-2017, Larry Wall Perl may be copied only under the terms of either …

1
วิธีเลียนแบบ wc -l ใน Raku
ใน perl 5 คุณสามารถจำลองwc -lโดยใช้ oneliner: perl -lnE 'END {say $.}' test.txt วิธีการใช้งานฟังก์ชั่นนี้ใน Raku หากคุณพยายามใช้สิ่งนี้: raku -e 'say "test.txt".IO.open.lines.elems' ปรากฎว่าช้าและใช้หน่วยความจำมาก ข้อมูลสำหรับการทำซ้ำ: $ wget http://eforexcel.com/wp/wp-content/uploads/2017/07/1500000%20Sales%20Records.zip $ unzip "1500000 Sales Records.zip" $ mv "1500000 Sales Records.csv" part.txt $ for i in `seq 1 10`; do cat part.txt >> test.txt ; done $ …
9 perl  raku 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.