2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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/

7 :デフォルトの名無しさん:2019/02/02(土) 01:13:45.25 ID:ZgweYnRo.net
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.net
(洋書) 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+.net
>>7 perl で書けばperl そのものじゃん。

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

10 :デフォルトの名無しさん:2019/02/03(日) 23:38:34.25 ID:DVXBklBr.net
単にCGIで使われるという流行が沈静化しただけだよ。使われている所では使われている。
元からCGI専用言語でもなんでもなくなんでもできるからな。

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

11 :デフォルトの名無しさん:2019/02/15(金) 14:42:35.23 ID:bVEZ7wIc.net
>>6
どういうレベルの質問?

12 :デフォルトの名無しさん:2019/02/18(月) 00:23:21.60 ID:pGUSPpE4.net
けっこう大きめのEUCで出来たプログラムを全部utf8に直す作業が始まるんだが、面倒くさいんだが
構成ファイルもたくさんあるし、読み書きしてるようなファイルもたくさんあるし、プラグイン方式みたいに作られてて、既存のプラグイン的なのも全部EUCでutf8に直さなきゃならないんだが

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

13 :デフォルトの名無しさん:2019/02/18(月) 00:58:26.57 ID:pGUSPpE4.net
はいやっぱりバグったファイルの読み込みが出来なくなった

14 :デフォルトの名無しさん:2019/02/18(月) 13:29:31.02 ID:trvxFZJG.net
そういやUTF8だとprintfとかで幅を揃えるのができなくなったりして大変だな。
%-10sとかやっても漢字が入るとそこが出力時に3バイトになったりしてずれて役に立たない。
こういう幅とか考慮してフォーマットしてくれるモジュールあるんだろうか?perlだから誰かが作ってそうではあるが。

15 :デフォルトの名無しさん:2019/02/18(月) 15:02:51.14 ID:+OgI4mQP.net
Unicode::GCStringでカラム数とれるっぽいから空白いくつ詰めるかは計算できそう

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

17 :デフォルトの名無しさん:2019/02/18(月) 20:51:52.45 ID:trvxFZJG.net
一生を掛けて修復するプログラムになったようだな。

18 :デフォルトの名無しさん:2019/02/18(月) 20:52:30.58 ID:trvxFZJG.net
>>15
おお。ありがとう。やはりあったか。

19 :デフォルトの名無しさん:2019/02/26(火) 09:36:37.24 ID:DhIH/rsp.net
$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.net
ちょっとマジで聞きたいことがあるんだが、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/.net
>>20
自分でファイル名をそういう風にエンコードすれば?

22 :デフォルトの名無しさん:2019/02/26(火) 20:30:51.25 ID:vB+znWqX.net
>>21
すまんが読めなくなるから駄目

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

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


困る
統一して欲しい

23 :デフォルトの名無しさん:2019/02/26(火) 20:42:22.45 ID:RjPoX3nV.net
perl関係ある?

24 :デフォルトの名無しさん:2019/02/26(火) 20:51:34.33 ID:vB+znWqX.net
>>23
ほぼない
けどWeb制作板に行くとエンコードどころか文字コードも理解してなかったから絶対回答こない

25 :デフォルトの名無しさん:2019/02/26(火) 21:02:05.63 ID:c2o2e7e/.net
どうしてもすぐになんとかしたいなら全てをUTF8にする。

26 :デフォルトの名無しさん:2019/02/26(火) 21:32:12.63 ID:tHWhBgwU.net
ほんとにcp932なのか?
実はUTF-8で出力されてて、ヘッダはただ無視されてたりしないのか?

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

27 :デフォルトの名無しさん:2019/02/26(火) 22:01:28.20 ID:DhIH/rsp.net
そのような不正な URL がどのように扱われるかを問うのはあまり有意義とは思えない。
適切に扱ってほしいなら適切にエンコードするしかないと思うのだが。
HTML::Element とか URI を使えば簡単だよ。

28 :デフォルトの名無しさん:2019/02/27(水) 00:05:17.07 ID:7T/MRSXz.net
>>26
ほんとにcp932
なのにutf8でエンコードされる
>>27
cgiは、どっかにあるHTMLが書いてあるテキストファイルを読み込んで出力してるだけだから、<IMG SRC="あいうえお.jpg">のあいうえおの部分を見つけ出してエンコードするのは無理がある。
さらにエンコード下として、それをデコードしてパスを通すhttpdと通さないhttpdがあるようなので仕様を知りたい

29 :デフォルトの名無しさん:2019/02/27(水) 02:26:58.26 ID:Hcodp8Vt.net
ホントにそうなら、やっぱブラウザのせいなんかね。
データをデコードしたテキストをそのままURLにしたら、たしかにそうなりそうな気はする。

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

30 :デフォルトの名無しさん:2019/02/27(水) 03:01:51.84 ID:7T/MRSXz.net
>>29
もうcp932のファイル名はやめて全部アルファベットにしようと思うのだが、
Rewriteってなんだろう
アニメが出てきたんだが

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

31 :デフォルトの名無しさん:2019/02/27(水) 09:17:13.93 ID:MitD/HmJ.net
>>20
ブラウザがUTF-8 と解釈するのは、HTML のheader に、言語の指定をしていないからじゃないの?
ただし、sjis を指定しても、そのPC がsjis に対応していないかも?

>>22
>運用環境(有料で借りてる)のApacheさんはパスを、URLデコードしてる模様
URLデコードするかどうかを、設定ファイルで指定できないの?

>>30
web 系は、すべてのファイルを、BOM 無しUTF-8(UTF-8N)に統一すべき!
他の言語を使うと、PC・スマホがその言語に対応していない場合に、バグる

32 :デフォルトの名無しさん:2019/02/27(水) 10:18:43.12 ID:HuFKesk6.net
バグる、ですか

33 :31:2019/02/27(水) 12:43:30.58 ID:MitD/HmJ.net
漏れは、web 系の本を、軽く数十冊は読んでるけど、
sjis のファイルを使う本は、見たことがない

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

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

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

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

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

34 :デフォルトの名無しさん:2019/02/27(水) 13:14:56.19 ID:FWLYBGBg.net
>>30
「RewriteRule」。
# 「httpd」とかいうから、Apacheに詳しいんかと思ってた。

要はとにかく、サーバーがURLを受けてから、それをランタイムで変換して実際のアクセス先を決めることはできるはず、という提案。

35 :デフォルトの名無しさん:2019/02/27(水) 13:19:18.71 ID:FWLYBGBg.net
>>31
URLデコードを禁止できるか?
URLの仕様なのに。
それに、もししたとしたら、CGIの引数とかどうなるんだ?

36 :デフォルトの名無しさん:2019/02/27(水) 14:29:50.58 ID:7T/MRSXz.net
>言語の指定をしていないからじゃないの?
してる

>$print_code .= q[Content-Type: text/html;charset=Shift_JIS] . qq[\n];
>$print_code .= q[<META http-equiv="content-type" charset="Shift_JIS">];

>URLデコードするかどうかを、設定ファイルで指定できないの?
金払って借りてるマシンなのでたぶん無理なんじゃね?
いやApacheさんの使い方とか仕様とか全然知らないから知らんけど

>UTF-8(UTF-8N)に統一すべき!
cgiが古いんだよ
作り直したいけど簡単そうじゃないので放置してる
気持ち的には全部utf8にしたい

>>34
俺のサーバーじゃないけどそんなこと出来るのか?

37 :31:2019/02/27(水) 15:05:26.60 ID:MitD/HmJ.net
>>36
>$print_code .= q[Content-Type: text/html;charset=Shift_JIS] . qq[\n];
>$print_code .= q[<META http-equiv="content-type" charset="Shift_JIS">];

「html sjis meta」で検索すると、以下が見つかる。
上とは、ちょっと違う

<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

他には、PHP で作ったそのファイルが、UTF-8 で保存されているとか?

「html sjis 文字化け」で検索すれば?

文字化けを防ぐ&解消する方法
https://www.be-webdesigner.com/tips/coding/mojibake.htm

38 :デフォルトの名無しさん:2019/02/27(水) 20:57:58.02 ID:Hcodp8Vt.net
>>36
レンサバでも、管理者だったらいろいろできる。
しかし、もしそうだったとしても、どうやらたぶんおまえにはムリぽなので、もうあきらめろん。

39 :デフォルトの名無しさん:2019/03/02(土) 02:33:03.15 ID:LJe83Rmr.net
>>20-21
ブラウザごとにURLエンコードは統一は取れてなかったと思うよ
まず開発環境としてANHTTPDの使用をやめることをお勧めする
IISかApacheをインストールして使った方がいいと思う

40 :デフォルトの名無しさん:2019/03/04(月) 18:44:25.85 ID:G/cMwSEz.net
https://lavender.5ch.net/test/read.cgi/airline/1551189110/

このツールが使えない
誰か使い方を教えてくれ

ソースを拡張子.plにして保存、perl実行環境はインストール
ここまでは出来てる
ソースの改造の仕方が分からない

41 :デフォルトの名無しさん:2019/03/04(月) 19:13:42.66 ID:Y5viPS4k.net
連投ツールとか名前が穏やかじゃないから教えない

42 :デフォルトの名無しさん:2019/03/04(月) 19:18:59.22 ID:TpCWsYE8.net
今の5chではスクリプトによる連投はできないのでは?
試したことないのでわからんが。

しかしそのツールなんでわざわざforkして子プロセスに同じことさせてんだろ?その辺がワザなのか?よくわからんね。

43 :デフォルトの名無しさん:2019/03/04(月) 20:43:15.61 ID:q6ai/7VO.net
Perl は初めてかい? まず、Perl の勉強からだね。
何をするプログラムかは後回しにして、何が書かれているかを理解できるようになろう。
書かれていることを理解できるようになったら、使われているモジュールを理解しよう。
LWP を使ってみよう。勉強しなければならないことがたくさんあると気付くだろう。
最低でも HTTP の仕様書くらいは読まないと話にならない。
ここまでできれば最初のソースコードを理解して改造だってできるかも。

44 :デフォルトの名無しさん:2019/03/04(月) 20:47:32.38 ID:Y5viPS4k.net
彼はインストール方法を知りにきただけであってPerlを知りにきたわけではないだろう

45 :デフォルトの名無しさん:2019/03/04(月) 21:07:10.36 ID:9d3FcJ2N.net
メッセージ固定だなんて連投というより荒しツールだな

46 :デフォルトの名無しさん:2019/03/04(月) 21:19:56.49 ID:W5B7ie4G.net
今の2ちゃんは決まったツールでしか投稿できない

47 :デフォルトの名無しさん:2019/03/04(月) 23:55:42.18 ID:TpCWsYE8.net
だよなあ。そのせいでお気に入りの専ブラ使えなくなったし。

48 :デフォルトの名無しさん:2019/03/05(火) 15:13:16.59 ID:opbbmC0J.net
もうC++/Qtで書く気がしない。
Perl/Qtで事足りる。
Perlの開発者が「PCの速度が上ればCである必要はないだろう」みたいな事言ってたけど、
まさにその通りだな。

49 : :2019/03/06(水) 19:01:29.83 ID:pvc8mHD3.net
>>48
その perl は perl6 ですか?

50 :デフォルトの名無しさん:2019/03/06(水) 21:27:34.75 ID:USxtxcs5.net
なんかのはずみで処理が終わらなかったとき、自殺するようにしたいんだけど、

eval {

alarm 5;
$SIG{ALRM} = sub { exit; };

};

これでいいんだっけ?

51 :デフォルトの名無しさん:2019/03/06(水) 21:55:14.52 ID:/3I9LNWz.net
いいんじゃないすか それだけだとevalはいらないと思うけど
あと慣例ならハンドラ設定が先かな exitじゃなくdieとか

52 :デフォルトの名無しさん:2019/03/06(水) 22:26:52.53 ID:USxtxcs5.net
ありがとう

>evalはいらないと思うけど
よく覚えてないけど、evalはシグナルに対応してないシステムだとエラーで落ちる気がした

53 :デフォルトの名無しさん:2019/03/07(木) 00:21:03.62 ID:pkHUcH4A.net
perlipc を読むといいかも。
http://perldoc.jp/pod/perlipc

54 :デフォルトの名無しさん:2019/04/26(金) 17:48:05.44 ID:T3sMMsV1.net
Perl News に "Fork yeah!" というのがあってちょっと驚いた。
https://www.perl.com/article/fork-yeah-/

55 :デフォルトの名無しさん:2019/04/29(月) 00:48:49.16 ID:OgUfT4lW.net
メアド用にさくらインターネットのライトプラン(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用の言語じゃないから標準モジュールからは消した とか
そんな理由ならいいんだけどさ。。

56 :デフォルトの名無しさん:2019/04/29(月) 01:34:45.78 ID:EAhXUlQz.net
「core は出来るだけ小さく」
「CGI はもはや Web の主流ではない」

かな。必要になった者のみが追加でインストールすればよい
標準で代替になるようなものはないと思うが pure perl だろうし最悪 CGI モジュールも一緒にアップロードとかでも動くでしょ

そもそもさくらレンタルサーバーで使える perl って 5.8 〜 5.14 ぽいけど
ttps://help.sakura.ad.jp/hc/ja/articles/206053142#ac05

57 :デフォルトの名無しさん:2019/04/29(月) 01:57:14.83 ID:OgUfT4lW.net
>>56
どもども
その理由なら安心ですわ
perlのバージョンは確認したんだけど、消えた理由によっちゃ使うの気持ち悪いなーと思ったので
どもでした。

58 :デフォルトの名無しさん:2019/05/21(火) 19:09:48.73 ID:ItBIHcGN.net
5.30が出るのかと思ってたら、出てねー

やる気ねーのかよ

59 :デフォルトの名無しさん:2019/05/21(火) 21:00:16.28 ID:BVi2WQ22.net
ていうかこんなに長くアップデートが続いていることだけでもかなり凄い事だと思う。

60 :デフォルトの名無しさん:2019/05/21(火) 22:12:45.42 ID:vpg4l/5q.net
5.30.0 RC2までは出てるからそのうち出るだろ

61 :デフォルトの名無しさん:2019/06/01(土) 02:23:48.95 ID:4bbBO9Ct.net
$str =~ /$pattern/
みたいなことはできるけど、
$str =~ /$pattern/$opt
みたいにして大文字小文字を同一視するかどうかを動的に指定したい
if文で処理行を分けるしか無理?

62 :デフォルトの名無しさん:2019/06/01(土) 04:41:47.86 ID:uuPo6pHP.net
>>61
eval 使えばいいのでは?

63 :デフォルトの名無しさん:2019/06/01(土) 08:47:17.23 ID:GQlgchjf.net
Ruby では、Regexp オブジェクトで、動的に作れる

str = "aB"
opt = Regexp::IGNORECASE

p re = Regexp.new( str, opt )
#=> /aB/i

64 :デフォルトの名無しさん:2019/06/01(土) 10:32:32.69 ID:uuPo6pHP.net
パターンマッチの直前で比較対象の文字列を uc() 使って小文字を全て大文字に変換しておく、または lc() で大文字を全て小文字にしておく事でも実現できるな。
パターンの方にも変換必要になるかも知れないが、それについては予め大文字または小文字でパターン作っておけば回避できる。

65 :デフォルトの名無しさん:2019/06/01(土) 10:33:06.85 ID:4bbBO9Ct.net
ただ、どう考えても遅くなるよな
素直に切り替えよう

66 :デフォルトの名無しさん:2019/06/01(土) 11:42:41.31 ID:UESmRH3l.net
>>61
# http://perldoc.jp/docs/perl/perlre.pod#Extended32Patterns
my $subject = 'FooBar';
my $search = 'foobar';

my $pattern = qr/$search/;
print $subject =~ /$pattern/ ? 'match' : 'unmatch', "\n";

$pattern = qr/(?i)$search/;
print $subject =~ /$pattern/ ? 'match' : 'unmatch', "\n";

67 :デフォルトの名無しさん:2019/06/01(土) 11:49:39.64 ID:4bbBO9Ct.net
(?i)と書いておけばいいだけか
じゃあもう実装済みで、使う側でどうにでもできる

68 :デフォルトの名無しさん:2019/06/01(土) 13:34:35.95 ID:zyIO0HLx.net
Python ってダサいよね。

69 :デフォルトの名無しさん:2019/06/13(木) 09:38:18.19 ID:8EHJsjb3.net
Pythonはほどほどの長さのスクリプト言語としてならアリなんだが
ツールとしては良くも悪くも電卓だなぁ

70 :デフォルトの名無しさん:2019/06/14(金) 01:28:05.42 ID:TwyiKBjF.net
バッチは使いやすさでperl、サーバだと今はパフォーマンスで選んでgolangやろうとしてるわ

71 :デフォルトの名無しさん:2019/06/14(金) 21:23:40.01 ID:GJHBGGzo.net
https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00682/061100007/
Pythonはコードが書きやすい?ご冗談でしょう

72 :デフォルトの名無しさん:2019/06/14(金) 23:12:24.97 ID:oN4k2Se6.net
>>71
読んだけど、実際にはタイトルほどPythonを悪くいってないな。w

73 :デフォルトの名無しさん:2019/06/16(日) 10:31:31.41 ID:Q48cejx2.net
windowsでreaddirするとcp932で読めてくる

それだと面倒なので、opendirする時か、ハンドラに対して、
decoding(cp932) みたいに指定するにはどうすればいい?

74 :デフォルトの名無しさん:2019/06/16(日) 14:26:37.09 ID:bI4lsVP6.net
https://www.javadrive.jp/perl/file/index12.html

75 :perltidy バグってない?:2019/06/28(金) 03:27:32.11 ID:yOZUOG90.net
perltidy -pbp -nola perl_file
この -pbp は perl best practices にする設定になっている
という仕様が書かれているが

sub {
:LABEL
for ....................

のようなラベルが本の通りにならない。たとえば 103ページなど
ラベル調整を諦めて -nola をつけ、手動で正しくすることにした

これバグだよな?

76 :バグもういっこ:2019/06/28(金) 03:37:53.64 ID:yOZUOG90.net
https://i.imgur.com/YlNx4as.png
左のように綺麗にまっすぐ整えろ が本の通りなのに
右のように変なところにいく

77 :デフォルトの名無しさん:2019/06/28(金) 05:48:53.09 ID:MYNfkfjj.net
何語?

78 :デフォルトの名無しさん:2019/06/28(金) 14:53:22.61 ID:oMWPNRS2.net
perl にインデントを求めるな。

79 :デフォルトの名無しさん:2019/06/29(土) 00:24:21.75 ID:YzN8MsSb.net
\(^o^)/

80 :デフォルトの名無しさん:2019/06/29(土) 05:53:24.17 ID:3U68S2mZ.net
どうでもインデント

81 :デフォルトの名無しさん:2019/06/29(土) 15:13:13.34 ID:3U68S2mZ.net
sjisでローマ数字のUが書いてあるのをutf8にすると、どうやっても化けるな

82 :デフォルトの名無しさん:2019/06/29(土) 15:18:34.74 ID:3U68S2mZ.net
一旦生で読んでcp932でデコードすればいいのか
LWP:Simpleだとそのへんに手が出せない

83 :デフォルトの名無しさん:2019/06/29(土) 17:02:36.85 ID:o1VtcfU0.net
MySQLもそうだけど、sjisは使っちゃイカンやろ。
細かいところで文字の置き換えルールがメチャクチャだったような。

いわゆるシフトJISはとにかくcp932で。

84 :デフォルトの名無しさん:2019/06/29(土) 17:53:32.74 ID:3U68S2mZ.net
多分htmlに俺はsjisだと書いてあると、LWPが勝手にsjisでデコードするんだろう

85 :デフォルトの名無しさん:2019/07/06(土) 10:10:18.37 ID:oMEfEQKE.net
元がeuc-jpだと、
$str =~ s/\x{301c}/〜/g;
みたいなことを明示的に書かないと、回避できないみたい
同じものやがな

86 :デフォルトの名無しさん:2019/07/12(金) 02:22:50.96 ID:AjCqo1Mf.net
下記のコードですがダブルクォートを介さずに$testから'フ'を表示させる方法はありますか?

#!/bin/env perl

use strict;

use warnings;
use utf8;

my $test = '\xE3\x83\x95';
my $test2 = "\xE3\x83\x95";

print "$test\n\n";
print "$test2\n\n";

87 :デフォルトの名無しさん:2019/07/12(金) 02:35:11.65 ID:gPQuYcbX.net
my $test3 = $test;
$test3 =~ s/\\x([0-9A-Fa-f]{2})/pack('H2', $1)/eg;
print "$test3\n";

88 :デフォルトの名無しさん:2019/07/12(金) 04:04:28.94 ID:yXcDIkyu.net
print eval qq/"$test\n\n"/;

89 :86:2019/07/12(金) 07:58:26.24 ID:AjCqo1Mf.net
ありがとうございます!

90 :デフォルトの名無しさん:2019/08/11(日) 05:06:35.55 ID:GTeyRs5o.net
こんな書きかたあったか?
DB<27> printf "%s\n", ('Fizz')[$_%3] . ('Buzz')[$_%5] || $_ for (1..15)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz


()[]が見おぼえがない

91 :デフォルトの名無しさん:2019/08/11(日) 05:17:44.88 ID:GTeyRs5o.net
()で配列とみなしたとき
()[0]は定義されていると考えて
()[1]などは未定義で無しというトリックか

92 :デフォルトの名無しさん:2019/08/11(日) 05:42:32.38 ID:GTeyRs5o.net
DB<25> print "$_ cup", ("s")[$_ < 2] , " of coffee\n" for (1..3)
1 cup of coffee
2 cups of coffee
3 cups of coffee

93 :デフォルトの名無しさん:2019/08/11(日) 10:17:48.54 ID:GTeyRs5o.net
DB<23> printf "%s\n", "$_ cup" . ("s")x!!($_ != 1) . " of coffee" for (0..3)
0 cups of coffee
1 cup of coffee
2 cups of coffee
3 cups of coffee

DB<24> printf "%s\n", "$_ butterfl" . ("y","ies")[($_ != 1)] for (0..3)
0 butterflies
1 butterfly
2 butterflies
3 butterflies

94 :デフォルトの名無しさん:2019/08/12(月) 10:00:54.45 ID:1t9yEA1l.net
今はもう (1)[1] が空リストにならないんだな。perl5220delta に書いてあった。
リストコンテキストでの問題を避けるために
[split( /::/ , $class)]->[4]
みたいな書き方をしていたんだが。
いや、これは変えなくていいのか。

95 :デフォルトの名無しさん:2019/08/12(月) 10:16:24.43 ID:BBJuWfXI.net
undefは省力とかフェールセーフ的に有効にするんじゃなくて、
厳密に仕様化して積極的に使うべきだよな

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

96 :デフォルトの名無しさん:2019/09/14(土) 11:56:42.38 ID:MMNKizJk.net
簡単なシェルスクリプトしか書けない素人ですがPerlの利点ってどこです?
grep -Pやperl -peで世話にはなっていますが目当てはあくまで正規表現だけですし
比較演算子はbashと逆だし変数は記号で使い分けなきゃならんしなんだこいつってなって

97 :デフォルトの名無しさん:2019/09/14(土) 12:00:19.76 ID:JUmWdv2U.net
どこでも使える

98 :デフォルトの名無しさん:2019/09/14(土) 23:46:33.57 ID:n7pzU9md.net
テキスト処理に特化されているところ
そのおかげで "," や " " とかの部分を q(,) q( ) などと書けたり
perl コードが正規表現と一体化していて再帰も扱えたりなど色々あるが
全部特化したことによる利点

99 :デフォルトの名無しさん:2019/09/14(土) 23:58:57.25 ID:SgsUVSB1.net
Perl6使ってる香具師さんいますか?

100 :デフォルトの名無しさん:2019/09/15(日) 00:02:41.49 ID:epz106Yo.net
bashで凝ったことを書くことを考えたら、Perlのほうがはるかに簡単。
bashは所詮シェルなので、クォートとかエスケープとか変数とか関数とか、いちいちワナが多いからな。

101 :デフォルトの名無しさん:2019/09/15(日) 17:56:28.72 ID:riyG3w3b.net
Perlの利点?
他の言語と同様になんでもできることかな。モジュール色々使うと作るの楽だしOSの違いもかなり吸収されてWindowsでもLinuxでも何も変更せずに動くプログラムも作れる。

シェルスクリプトも外部コマンド動かせば何でもできるとは言えるが、起動のオーバーヘッドの問題や起動しているコマンドの仕様が変わったときに個別に対応しなければいけないなど面倒な事がある。

102 :デフォルトの名無しさん:2019/10/23(水) 15:22:28.55 ID:Q75cL8J3.net
>>101
> OSの違いもかなり吸収されてWindowsでもLinuxでも何も変更せずに動くプログラムも作れる。
これでとんでもない目に遭ったぞ。
perlの\nは、内部的にはLF のみだが、OSがWindowsなら、出力する際に
CR+LF に自動的に変換してくれる。
しかし、出力文字コードがutf16le だと、特殊な宣言文を書かない限り、
LF (0x000a)は 「0x000a000d」ではなく、「0x000a0d」に変換され、
ぐちゃぐちゃに文字化けする。

文字化けの原因を特定し、回避方法を見つけるために、ずいぶん時間を取られた。

103 :デフォルトの名無しさん:2019/10/23(水) 15:31:23.16 ID:7+59i/z7.net
chcp 1200でいけそうな気がするんだけど

104 :デフォルトの名無しさん:2019/10/23(水) 17:37:45.28 ID:azQS8Nqn.net
>>102
\n は他の言語でも気を付けた方が良い。
例えC言語だったとしても歴史的な事情でライブラリが勝手に変換するかも知れない。
この頃はそれにまつわるバグは減ってるとは思うけどね。

ま、少なくとも \n を \x0a だと信じ込んで使うのは止めた方がいいだろうな。
\x0a はあくまでも \x0a と書いた方が良い。
Javaとかでは改行は System.out.println() を使って改行させるようにして \n を埋め込んでの改行は極力避けた方が良い。

105 :デフォルトの名無しさん:2019/10/24(木) 00:15:31.72 ID:dNYiTPCj.net
>>102
いや、特殊な宣言文ってなんだよ。PerlIO の man 読めよ。
open 関数や binmode 関数の説明にも「PerlIO を読め」って書いてあるよ。

106 :デフォルトの名無しさん:2019/10/24(木) 00:54:14.51 ID:NQorbS3o.net
s/\n//g;
s/\r//g;
俺は常にこうしてる

総レス数 1004
263 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★