ブックマークお願いします (*´・ω`)ノ凸ポチ♪

Perlについての質問箱 64箱目

Perlについての質問箱 64箱目

1 :デフォルトの名無しさん:2019/02/01(金) 09:44:37.18 ID:1/Kr4Qjk.net
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板: https://medaka.5ch.net/php/

このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
荒らしはスルー推奨。

“The duct tape of the Internet” こと、Perlについての質問箱です。
“There’s more than one way to do it” ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

www.perl.org/get.html
Download Latest Stable Source (5.28.1)

▼前スレ
Perlについての質問箱 61箱目
http://toro.5ch.net/test/read.cgi/tech/1381561905/
Perlについての質問箱 62箱目
http://toro.5ch.net/test/read.cgi/tech/1385039352/
Perlについての質問箱 63箱目
https://mevius.5ch.net/test/read.cgi/tech/1392820583/

2 :デフォルトの名無しさん:2019/02/01(金) 09:44:58.17 ID:1/Kr4Qjk

【本】
初めてのPerl 第7版(リャマ)[2018年01月 発行]
https://www.oreilly.co.jp/books/9784873118246/

続・初めてのPerl 改訂第2版 [2013年08月 発行]
https://www.oreilly.co.jp/books/9784873116280/

マスタリングPerl [2009年03月 発行]
https://www.oreilly.co.jp/books/9784873113975/

Effective Perl 第2版 [発売日:2015年02月16日]
https://www.shoeisha.co.jp/book/detail/9784798139814

もっと自在にサーバを使い倒す 業務に役立つPerl [2012年4月11日発売]
http://gihyo.jp/book/2012/978-4-7741-5025-3

モダンPerl入門 [2009/2/10]
https://www.amazon.co.jp/dp/4798119172/
モダンPerl入門 増補改訂版(仮)[2014年1月予定]
http://codezine.jp/book/modernperl2

Perl CPANモジュールガイド [2011/4/8]
https://www.amazon.co.jp/dp/486267108X

【オンラインマニュアル】
最新のドキュメント: https://metacpan.org/release/perl
perldoc.jp: http://perldoc.jp/
perldoc.perl.org: http://perldoc.perl.org/

3 :デフォルトの名無しさん:2019/02/01(金) 09:45:16.42 ID:1/Kr4Qjk

[少し古めの良書]

プログラミングPerl 第3版 VOLUME 1,2(駱駝)[2002年09月 発行]
https://www.oreilly.co.jp/books/4873110963/
https://www.oreilly.co.jp/books/4873110971/

Perlクックブック 第2版 VOLUME 1,2 [2004年09月 発行]
https://www.oreilly.co.jp/books/4873112028/

Perl ベストプラクティス [2006年08月 発行]
https://www.oreilly.co.jp/books/4873113008/

Perl Hacks [2007年01月 発行]
https://www.oreilly.co.jp/books/9784873113142/

実用 Perlプログラミング 第2版 [2006年03月 発行]
https://www.oreilly.co.jp/books/487311280X/

4 :デフォルトの名無しさん:2019/02/01(金) 09:45:35.14 ID:1/Kr4Qjk

【日本語、Unicode関連】

Encodeモジュール
https://metacpan.org/release/Encode

第31回 encoding:いつまでもjperlから抜け出せない方に
http://gihyo.jp/dev/serial/01/modern-perl/0031

第32回 Encode:日本語だけ扱えればよいのではなく
http://gihyo.jp/dev/serial/01/modern-perl/0032

perlunifaq – Perl Unicode FAQ
http://perldoc.jp/docs/perl/5.18.1/perlunifaq.pod

perlunicode – Perl における Unicode サポート
http://perldoc.jp/docs/perl/5.12.1/perlunicode.pod

【モジュール】
Search the CPAN – metacpan.org: https://metacpan.org/

【Perl環境構築】
plenv
https://github.com/tokuhirom/plenv

cpanm
https://metacpan.org/pod/release/MIYAGAWA/App-cpanminus-1.7001/lib/App/cpanminus.pm
http://perldoc.jp/docs/modules/App-cpanminus-1.7001/lib/App/cpanminus/fatscript.pod

5 :デフォルトの名無しさん:2019/02/01(金) 09:45:51.24 ID:1/Kr4Qjk

# [Perl 日本語処理の基礎の基礎]
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => “:encoding(cp932)”;
binmode STDIN => “:encoding(cp932)”;
binmode STDOUT => “:encoding(cp932)”;
binmode STDERR => “:encoding(cp932)”; # ※1
use Encode;
# 次に、あなたが実行したい処理の内容を入れて下さい。
$file = ‘C:/なんたら/かんたら.txt’;
open my $fh, ‘<‘, encode(“cp932”, $file) or die $! ; # ※2
print <$fh>;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
# 【注】※1. の行を入れると、DOS 窓への日本語出力は簡便になりますが、
# ソースファイル名に非 ANSI 文字が含まれる場合に die 文の出力が失敗します。
# ※2. OS に渡す文字列(ファイル名,dos コマンドのオプションなど)は、
# この例のように cp932 でエンコードする必要があります。

6 :デフォルトの名無しさん:2019/02/01(金) 23:49:26.97 ID:sNV+JFAU

今更だがCGIとPerlの区別ってなんだよw

7 :デフォルトの名無しさん:2019/02/02(土) 01:13:45.25 ID:ZgweYnRo

Common Gateway Interface
https://ja.wikipedia.org/wiki/Common_Gateway_Interface

Common Gateway Interface(コモン・ゲートウェイ・インタフェース、CGI)は、
ウェブサーバ上でユーザプログラムを動作させるための仕組み。
現存する多くのウェブサーバプログラムはCGIの機能を利用することができる。
CGI は環境変数や標準入出力の扱えるプログラミング言語で扱うことができる。

8 :デフォルトの名無しさん:2019/02/02(土) 10:20:47.06 ID:ZgweYnRo

(洋書) Mastering Perl: Creating Professional Programs with Perl 2nd Edition [2014/1/27]
https://www.amazon.co.jp/dp/144939311X/
マスタリングPerlの第2版

(洋書) Programming Perl: Unmatched power for text processing and scripting 4th Edition [2012/3/9]
https://www.amazon.co.jp/dp/0596004923/
プログラミングPerlの第4版

9 :デフォルトの名無しさん:2019/02/03(日) 01:42:34.74 ID:72eosYJ+

>>7 perl で書けばperl そのものじゃん。

しかし、perl は終わったな。 python に取って代わられた。

10 :デフォルトの名無しさん:2019/02/03(日) 23:38:34.25 ID:DVXBklBr

単にCGIで使われるという流行が沈静化しただけだよ。使われている所では使われている。
元からCGI専用言語でもなんでもなくなんでもできるからな。

Python は機械学習で現在流行っているが、それもやがては沈静化するだろう。
かといってなくなることはない。

11 :デフォルトの名無しさん:2019/02/15(金) 14:42:35.23 ID:bVEZ7wIc

>>6
どういうレベルの質問?

12 :デフォルトの名無しさん:2019/02/18(月) 00:23:21.60 ID:pGUSPpE4

けっこう大きめのEUCで出来たプログラムを全部utf8に直す作業が始まるんだが、面倒くさいんだが
構成ファイルもたくさんあるし、読み書きしてるようなファイルもたくさんあるし、プラグイン方式みたいに作られてて、既存のプラグイン的なのも全部EUCでutf8に直さなきゃならないんだが

めんどくさいと言うか、正常に動くのかどうか不安なんだが
一応表面上は正常に動いたように見えても、俺にはそれはまやかしに感じるんだが

13 :デフォルトの名無しさん:2019/02/18(月) 00:58:26.57 ID:pGUSPpE4

はいやっぱりバグったファイルの読み込みが出来なくなった

14 :デフォルトの名無しさん:2019/02/18(月) 13:29:31.02 ID:trvxFZJG

そういやUTF8だとprintfとかで幅を揃えるのができなくなったりして大変だな。
%-10sとかやっても漢字が入るとそこが出力時に3バイトになったりしてずれて役に立たない。
こういう幅とか考慮してフォーマットしてくれるモジュールあるんだろうか?perlだから誰かが作ってそうではあるが。

15 :デフォルトの名無しさん:2019/02/18(月) 15:02:51.14 ID:+OgI4mQP

Unicode::GCStringでカラム数とれるっぽいから空白いくつ詰めるかは計算できそう

16 :デフォルトの名無しさん:2019/02/18(月) 18:04:58.85 ID:pGUSPpE4

かなり頑張ったがUTF8にするのは無理だということになって諦めた
sjisとEUCとutf8が無駄に入り乱れる結果になった
ファイル名はプログラム内部ではEUCで扱ってたり、実際のファイル名はsjisだったり、ファイルの中身はEUCだったり、通信はsjisだったり、
そもそも文字単位じゃなくてバイト単位でデータを管理する記述がめっちゃあったり、
ゴミかよ!

17 :デフォルトの名無しさん:2019/02/18(月) 20:51:52.45 ID:trvxFZJG

一生を掛けて修復するプログラムになったようだな。

18 :デフォルトの名無しさん:2019/02/18(月) 20:52:30.58 ID:trvxFZJG

>>15
おお。ありがとう。やはりあったか。

19 :デフォルトの名無しさん:2019/02/26(火) 09:36:37.24 ID:DhIH/rsp

$str = “abcdefg”; open( $fh,”<“,¥$str); open( $fh2,”<&”,$fh);
はできるけど
open( ¥*STDIN,”<“,¥$str)
open( ¥*STDIN,”<&”,$fh)
はできないんだな。知らなかった。”Bad file descriptor” って言われた。
どこかに書いてあったっけ?

20 :デフォルトの名無しさん:2019/02/26(火) 18:47:18.00 ID:vB+znWqX

ちょっとマジで聞きたいことがあるんだが、cgiからブラウザに対してCP932でHTMLが出力されている。
もちろんヘッダも正しく指定されている。

んで、そのHTMLの中に、
<IMG SRC=”あいうえお.jpg”> などと言う日本語のファイルが指定されているわけだ。
その日本語のファイル名も、CP932だ。

んで、ご丁寧にブラウザが自動でURLエンコードしてくれるようなのだが、
%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A.jpg
となるのだ。これは “あいうえお.jpg” をUTF-8として解釈した時の文字コードだ。
俺としては %82%A0%82%A2%82%A4%82%A6%82%A8,jpg (CP932の文字コード)となってもらわなくては困る。

聞きたいことは2つで、これを解決するにはどうしたら良いか?
もう一つは、ブラウザごとの仕様によりこの挙動は違うのか?
の二点だ
よろしく頼む

21 :デフォルトの名無しさん:2019/02/26(火) 20:23:51.98 ID:c2o2e7e/

>>20
自分でファイル名をそういう風にエンコードすれば?

22 :デフォルトの名無しさん:2019/02/26(火) 20:30:51.25 ID:vB+znWqX

>>21
すまんが読めなくなるから駄目

あと、断定はしてないが、ブラウザやHTTPDのソフトごとに、エンコードやデコードの扱いの違いがある疑いがある
開発環境のwindowsでANHTTPDってやつ使ってるが、こいつはたぶんファイル名をデコードしてないくさい
でも運用環境(有料で借りてる)のApacheさんはパスをURLデコードしてる模様
俺の予想だと、ブラウザも古いのだと絶対自動でUTF-8なんかにはデコードしないと思う。

もしかしたら間違ってるかもしれないけど

困る
統一して欲しい

23 :デフォルトの名無しさん:2019/02/26(火) 20:42:22.45 ID:RjPoX3nV

perl関係ある?

24 :デフォルトの名無しさん:2019/02/26(火) 20:51:34.33 ID:vB+znWqX

>>23
ほぼない
けどWeb制作板に行くとエンコードどころか文字コードも理解してなかったから絶対回答こない

25 :デフォルトの名無しさん:2019/02/26(火) 21:02:05.63 ID:c2o2e7e/

どうしてもすぐになんとかしたいなら全てをUTF8にする。

26 :デフォルトの名無しさん:2019/02/26(火) 21:32:12.63 ID:tHWhBgwU

ほんとにcp932なのか?
実はUTF-8で出力されてて、ヘッダはただ無視されてたりしないのか?

まず、クライアントでデータを保存して、バイナリエディタで確認してみたら?

27 :デフォルトの名無しさん:2019/02/26(火) 22:01:28.20 ID:DhIH/rsp

そのような不正な URL がどのように扱われるかを問うのはあまり有意義とは思えない。
適切に扱ってほしいなら適切にエンコードするしかないと思うのだが。
HTML::Element とか URI を使えば簡単だよ。

28 :デフォルトの名無しさん:2019/02/27(水) 00:05:17.07 ID:7T/MRSXz

>>26
ほんとにcp932
なのにutf8でエンコードされる
>>27
cgiは、どっかにあるHTMLが書いてあるテキストファイルを読み込んで出力してるだけだから、<IMG SRC=”あいうえお.jpg”>のあいうえおの部分を見つけ出してエンコードするのは無理がある。
さらにエンコード下として、それをデコードしてパスを通すhttpdと通さないhttpdがあるようなので仕様を知りたい

29 :デフォルトの名無しさん:2019/02/27(水) 02:26:58.26 ID:Hcodp8Vt

ホントにそうなら、やっぱブラウザのせいなんかね。
データをデコードしたテキストをそのままURLにしたら、たしかにそうなりそうな気はする。

どうしてもあちこちいじらずに簡単に対処するなら、サーバーのほうはどう?
プロキシとかRewriteとか使って、とにかくURLを受けてしまってから、受けたURLを動的に解釈したら?

30 :デフォルトの名無しさん:2019/02/27(水) 03:01:51.84 ID:7T/MRSXz

>>29
もうcp932のファイル名はやめて全部アルファベットにしようと思うのだが、
Rewriteってなんだろう
アニメが出てきたんだが

まあおまえらありがとうな
utf8ならまだしもcp932のファイル名をそのまま使おうとした俺が悪かったんだよきっと
でもwindowsがcp932のファイル名だからしょうがないんだよ

33 :31:2019/02/27(水) 12:43:30.58 ID:MitD/HmJ

漏れは、web 系の本を、軽く数十冊は読んでるけど、
sjis のファイルを使う本は、見たことがない

それに、パス・ファイル名などのシステムの構成物に、全角を使う本も見たことがない。
パス・ファイル名は、ファイル内容のテキストじゃない。
あくまでもシステムの構成物だから、半角英数字が基本

Linux・Windows 共用のパス・ファイル名には、半角英数字と、_ (アンダーバー)だけを使う。
半角空白もバグるので、すごく嫌われる

さらに、大文字小文字だけが異なる、パス・ファイル名も使ってはいけない。
例えば、Ab, aB がLinuxでは使えるけど、Windowsでは共存できないから

だから、このシステムは、sjis・全角の2つを使う、違反を起こしている!
こういうやり方を書いた本は、絶対に無いはず

sjis を使っているのは、ロートルの5ch ぐらいw
だから少しでも、5chのシステムをいじるとバグるから、システムを修正できない!

35 :デフォルトの名無しさん:2019/02/27(水) 13:19:18.71 ID:FWLYBGBg

>>31
URLデコードを禁止できるか?
URLの仕様なのに。
それに、もししたとしたら、CGIの引数とかどうなるんだ?

38 :デフォルトの名無しさん:2019/02/27(水) 20:57:58.02 ID:Hcodp8Vt

>>36
レンサバでも、管理者だったらいろいろできる。
しかし、もしそうだったとしても、どうやらたぶんおまえにはムリぽなので、もうあきらめろん。

39 :デフォルトの名無しさん:2019/03/02(土) 02:33:03.15 ID:LJe83Rmr

>>20-21
ブラウザごとにURLエンコードは統一は取れてなかったと思うよ
まず開発環境としてANHTTPDの使用をやめることをお勧めする
IISかApacheをインストールして使った方がいいと思う

43 :デフォルトの名無しさん:2019/03/04(月) 20:43:15.61 ID:q6ai/7VO

Perl は初めてかい? まず、Perl の勉強からだね。
何をするプログラムかは後回しにして、何が書かれているかを理解できるようになろう。
書かれていることを理解できるようになったら、使われているモジュールを理解しよう。
LWP を使ってみよう。勉強しなければならないことがたくさんあると気付くだろう。
最低でも HTTP の仕様書くらいは読まないと話にならない。
ここまでできれば最初のソースコードを理解して改造だってできるかも。

44 :デフォルトの名無しさん:2019/03/04(月) 20:47:32.38 ID:Y5viPS4k

彼はインストール方法を知りにきただけであってPerlを知りにきたわけではないだろう

45 :デフォルトの名無しさん:2019/03/04(月) 21:07:10.36 ID:9d3FcJ2N

メッセージ固定だなんて連投というより荒しツールだな

49 : :2019/03/06(水) 19:01:29.83 ID:pvc8mHD3

>>48
その perl は perl6 ですか?

55 :デフォルトの名無しさん:2019/04/29(月) 00:48:49.16 ID:OgUfT4lW

メアド用にさくらインターネットのライトプラン(sslログインなし)借りてるんだけど
そこにちょっとしたcgi作って置こうとしてて
ものすごい久々にuse CGIとかやってます。

で、corelist CGIってやると
> Data for 2018-01-20
> CGI was first released with perl 5.004, deprecated (will be CPAN-only) in v5.19.7 and removed from v5.21.0
と出るんだけど

CGIが標準モジュールから削除された理由とか、
代替となるモジュールって知ってる人いませんか。

Perlはweb用の言語じゃないから標準モジュールからは消した とか
そんな理由ならいいんだけどさ。。

58 :デフォルトの名無しさん:2019/05/21(火) 19:09:48.73 ID:ItBIHcGN

5.30が出るのかと思ってたら、出てねー

やる気ねーのかよ

59 :デフォルトの名無しさん:2019/05/21(火) 21:00:16.28 ID:BVi2WQ22

ていうかこんなに長くアップデートが続いていることだけでもかなり凄い事だと思う。

61 :デフォルトの名無しさん:2019/06/01(土) 02:23:48.95 ID:4bbBO9Ct

$str =‾ /$pattern/
みたいなことはできるけど、
$str =‾ /$pattern/$opt
みたいにして大文字小文字を同一視するかどうかを動的に指定したい
if文で処理行を分けるしか無理?

62 :デフォルトの名無しさん:2019/06/01(土) 04:41:47.86 ID:uuPo6pHP

>>61
eval 使えばいいのでは?

68 :デフォルトの名無しさん:2019/06/01(土) 13:34:35.95 ID:zyIO0HLx

Python ってダサいよね。

71 :デフォルトの名無しさん:2019/06/14(金) 21:23:40.01 ID:GJHBGGzo

https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00682/061100007/
Pythonはコードが書きやすい?ご冗談でしょう

81 :デフォルトの名無しさん:2019/06/29(土) 15:13:13.34 ID:3U68S2mZ

sjisでローマ数字のが書いてあるのをutf8にすると、どうやっても化けるな

85 :デフォルトの名無しさん:2019/07/06(土) 10:10:18.37 ID:oMEfEQKE

元がeuc-jpだと、
$str =‾ s/¥x{301c}/〜/g;
みたいなことを明示的に書かないと、回避できないみたい
同じものやがな

91 :デフォルトの名無しさん:2019/08/11(日) 05:17:44.88 ID:GTeyRs5o

()で配列とみなしたとき
()[0]は定義されていると考えて
()[1]などは未定義で無しというトリックか

95 :デフォルトの名無しさん:2019/08/12(月) 10:16:24.43 ID:BBJuWfXI

undefは省力とかフェールセーフ的に有効にするんじゃなくて、
厳密に仕様化して積極的に使うべきだよな

初期化されてないものを使うのが気持ち悪いと感じるのは、
auto変数が本当に領域確保するだけだった頃の名残り

100 :デフォルトの名無しさん:2019/09/15(日) 00:02:41.49 ID:epz106Yo

bashで凝ったことを書くことを考えたら、Perlのほうがはるかに簡単。
bashは所詮シェルなので、クォートとかエスケープとか変数とか関数とか、いちいちワナが多いからな。

110件をまとめました。
最新情報はこちら

話題カテゴリの最新記事