X



【モダン推奨】Perlについての質問箱 50箱目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2012/01/21(土) 10:56:39.03
CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perl の区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://hibari.2ch.net/php/ )

回答する際はモダンな方法でお願いします
(例 jcode.plではなくEncodeモジュールを使った方法)
理由はもう2012年です。いい加減2000年以前の方法はやめましょう。
最新のPerlを使うほうがかっこいいです。
いつまで勉強しないつもりですか?
過去にとらわれるのはもうやめです。進歩しませんよ。

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

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

http://www.perl.org/get.html
● 2011/10/30 現在の最新版: 5.14.2

▼ 前スレ
Perlについての質問箱 49箱目
http://toro.2ch.net/test/read.cgi/tech/1319953460/
リンク集は >>2-3辺り
Perl 日本語処理の基礎の基礎 >>4辺り


0470デフォルトの名無しさん
垢版 |
2014/02/05(水) 21:26:16.47
2つの文字列を文字ごとに分解して2つの配列を作ってから↓
ttp://perldoc.jp/docs/modules/Algorithm-Diff-1.15/Diff.pod
0472デフォルトの名無しさん
垢版 |
2014/02/05(水) 22:39:45.84
diffは多少一致してない部分があってもいい、みたいな曖昧な判定をするから、
余計にややこしいんだよな
0475デフォルトの名無しさん
垢版 |
2014/06/20(金) 08:07:41.06ID:w/WZ2GYd
say "";
0476デフォルトの名無しさん
垢版 |
2015/02/07(土) 15:14:06.33ID:yYV1uKlQ
ネットで検索する時は単語をスペースで区切ってそのANDで結果を得るけど、
同じことを正規表現でやりたい時はどう書けばいい?
0477デフォルトの名無しさん
垢版 |
2015/02/26(木) 19:17:26.46ID:0RIBJGtF
「$s が hello と world の両方にマッチする」なら、単に

$s =~ /hello/ && $s =~ /world/

と書くだけじゃないの?質問がよく分からないのだけれども
0478デフォルトの名無しさん
垢版 |
2015/02/26(木) 20:48:44.94ID:G3LqtZtx
>>476
あえて無理やり正規表現のみでやるなら否定先読みを使う

if( /(hoge|piyo).*(?!\1)(hoge|piyo)/ ){ print "成功\n"; }
0479デフォルトの名無しさん
垢版 |
2015/02/26(木) 21:43:04.63ID:dwtaxn6g
否定の先読みなんかせんでも
print ‘foobar’ if /(?:foo.*?bar|bar.*?foo)/ ;
で良いんじゃねーのか
0481デフォルトの名無しさん
垢版 |
2015/02/27(金) 00:27:41.82ID:xTYPuOZ2
仮に検索エンジンみたいなのを書くにしても
何を対象にするのかとか、検索単位とかを決めてもらわんと書きづらいぞ
「同じこと」の通り「対象:Webサイト、単位:ページ」ならGoogleに投げりゃ済むし
0482デフォルトの名無しさん
垢版 |
2015/02/27(金) 00:34:35.35ID:dW0+IHnO
検索対象も文字列に決まってるだろ
正規表現でのマッチングだっつってるんだから

逃げてないで考えてみれ
0483デフォルトの名無しさん
垢版 |
2015/02/27(金) 01:46:02.77ID:xTYPuOZ2
>>482
文字列?
テキストでもファイルでもなく?
それって何に使うんだろか…結局、目的は何よ?って話だよ
もしかしたらもっと良い方法があるんじゃ?と勘ぐってしまうのよどうしても
0484デフォルトの名無しさん
垢版 |
2015/02/27(金) 06:35:52.51ID:dW0+IHnO
またよく判らん屁理屈を
検索の単位が文字列に対してで、それがどこから来たかは問題にならないだろ
まあ、大抵はファイルからだろうけど

で、ファイルならこんなツールがあるよ、みたいな感じで本題から逃げたいのが見え見え
0485デフォルトの名無しさん
垢版 |
2015/02/27(金) 09:44:40.27ID:xTYPuOZ2
>>484
いやまあ、文字列に対してなら

my $hit = 1;
for my $ptn (split(" ",$search)) {
$s =~ /$ptn/ or $hit = 0;
}

こんなんで出来ると思うけど、こんなんで本当に良いのか?
後出し条件とか大量に出てきそうな感じがするんだが
0486デフォルトの名無しさん
垢版 |
2015/02/27(金) 20:22:44.34ID:JIR4zlR2
お前は、「ワンライナーでどうやりますか」って質問に
スクリプト作成して答えるのか?

「正規表現でどうやりますか?」って質問には、
普通に正規表現で答えりゃいいだろうが。
実際、質問への答えは、
>>477->>479で終了してる。

後出しを心配するなら実際に後出しされてから
盛大に罵倒しろよ
0488デフォルトの名無しさん
垢版 |
2015/02/28(土) 16:50:40.78ID:05aMjvqG
元々の要求はただのスペース区切りだから、パラメータ数は不定で、
パラメータ抽出して、その全部に対してマッチングを繰り返すという当たり前の処理になる

でも、そんなことは最初から判っているのでわざわざ聞く筈がない

スペース区切りの文字列をそのまま使ってマッチングがしたいなら、
残念ながらperlの正規表現でそんなことは出来ない、が答えとなる
0490デフォルトの名無しさん
垢版 |
2015/02/28(土) 17:35:55.35ID:e1yM9CPU
質問者のレベルまで勝手に想定するし、、、

>>476から読み取れるのは、拡大解釈しても
「ワンセンテンスの正規表現で書くにはどうしたらいい?」
程度だろーに
0491デフォルトの名無しさん
垢版 |
2015/02/28(土) 19:58:12.22ID:HemDgo4Q
◯正規表現で、AND検索の実装って、どうやんの?
×正規表現で、「スペースを使って」AND検索の実装って、どうやんの?

「わざわざ聞く筈がない」まで、分かってんなら、
自分の解釈の仕方が間違ってないか、
自問しろよ
0492デフォルトの名無しさん
垢版 |
2016/01/10(日) 13:39:26.30ID:/ndDSiBm
971 名前:名無しさん@七周年[] 投稿日:2006/11/11(土) 00:56:10 ID:M8+ahUZV0
自称スーパープログラマー某

強烈加齢臭
メール見ない メール無視
ドキュメント見ない ドキュメント無視
説明聞かない 説明無視
話聞かない 話無視
ガム→むっちゃー むっちゃー むっちゃー むっちゃー
煎餅→バリバリバリバリバリバリ
菓子パン→モグモグモグモグモグモグモグモグモグモグ
カップアイス→むっちゃー むっちゃー ペロペロペロペロ

フロアすべてに響き渡る 超ばかでかいくしゃみ 当然手でおさえない

異音と異振動
ドスーン!ドスーン! ドカーン!ドカーン! バコーン!バコーン! ズドン!ズドン!
机が近いとマウスポインターが飛ぶ 誤操作誘発
書類だしたりしまうだけでドカンドカン

30秒ごとに口と鼻から異音
ふんっっ!    ふんっっ!   

備品破壊 貸与P C 破壊 他人のもの破壊

奴の作ったスクリプトとプログラムは使えない バグ製造機

電話や共有携帯電話 キーボードが油ベタベタ
奴に電話とPCとコンソールは触らせてはいけない
0493デフォルトの名無しさん
垢版 |
2016/01/10(日) 17:45:28.72ID:lr/f1ZoA
Perl 5 version 16の正規表現で、地の文の一部としてマッチさせたいときに
バックスラッシュでエスケープせねばならない文字の一覧を教えてください
文字集合[ ]の内外で違うとか、文脈依存があればそれも知りたいです
0494デフォルトの名無しさん
垢版 |
2016/01/10(日) 22:39:51.49ID:iK/aBQIt
何をしたいのか知らないけど
http://perldoc.jp/index/core
で疑問のほとんどは解決すると思う。

まあ、エスケープすべき文字を知りたいということならそれは「英数字以外」だ。
\Q と quotemeta 関数について調べてみてほしい。
0495デフォルトの名無しさん
垢版 |
2016/01/11(月) 19:10:22.91ID:JutXF6Cv
>>494
ありがとうございます。
質問の動機は単に手で正規表現を書くときエスケープすべきかどうか
悩ましかったから(実際には「+」や「:」や「#」とか「[ ]」の外の「-」はエスケープ無しでも通っていそう)
だったからですが、エスケープして無害ということであればそうします

それはそうとしてquotemeta便利杉、
0497デフォルトの名無しさん
垢版 |
2016/01/23(土) 06:03:31.81ID:mGQek17v
>>496
おるけど?

まだ後10年は掛る。
触る必要無し

処理速度とか早くなってんのかも知れんけど、
起動が遅くて、使い物にならん。
挙動もバギー、docも揃ってない。
止事無き事情から、アルファ版を正式版として
リリースしただけじゃね?
0498デフォルトの名無しさん
垢版 |
2016/02/07(日) 22:53:45.48ID:zQAcaA+r
外部コマンドの話が出てて思い出したけど、
外部コマンドを実行するときに任意の文字列を外部コマンドの引数として渡したい場合、
Linux環境でエスケープすべき文字は?
シングルクォートとバックスラッシュだけエスケープして、それをシングルクォートで括ればOK?
0499デフォルトの名無しさん
垢版 |
2016/02/09(火) 22:03:18.36ID:390QsJXI
なんかPerl 5.16.1のウィンドーズ版のUTF-8対応は中途半端な希ガス、
use utf8;としてUTF-8でソースコードを書いても
open()のファイル名とかsystem()に与えるコマンド文字列とかが'shiftjis'(正確には'cp932')のままだし、
コマンド引数も'shiftjis'(正確には'cp932')のままだし、
なんでああなんですかね…
0500デフォルトの名無しさん
垢版 |
2016/02/09(火) 23:41:10.97ID:J9+y92l0
dankogaiがのらりくらりうまく回避しちゃうからじゃない?
俺はもうperlでsjis処理するのはあきらめた。
0501デフォルトの名無しさん
垢版 |
2016/02/12(金) 00:23:06.63ID:kq1OODWj
いろいろ面倒なんで、俺は use utf8; を使わないことにしたよ。
0502デフォルトの名無しさん
垢版 |
2016/02/13(土) 14:58:53.06ID:vq3C3FT5
>>498
シェルを経由するのならシェルのマニュアルを読みなさいとしか言えない。
bash の場合なら「定義」の項のメタ文字と「クォート」の項。
シングルクォートなら大体大丈夫なはずだけど。
そういう心配をしなきゃならないならシェルを呼ばない方が無難。
シェル経由でなければシステムコールするだけだから。
0503デフォルトの名無しさん
垢版 |
2016/02/14(日) 22:17:05.33ID:ctVTXhCg
>>498
もしかして、普段は Windows 使ってるからコマンドラインを作って渡す方法しか知らないとかそういうこと?
0504デフォルトの名無しさん
垢版 |
2016/02/14(日) 22:28:48.47ID:d+6VipxK
思い付きで気軽にコマンドライン作って出力をキャプチャできるのがLLの良いところなのにね。
0505デフォルトの名無しさん
垢版 |
2016/02/15(月) 12:21:34.14ID:9WjYXC66
>>504
助けてあげる気が無いなら引っ込んでてくれないか?
0506デフォルトの名無しさん
垢版 |
2016/02/15(月) 15:10:01.24ID:8Z92Uy24
>>498
" " 内では、「$(変数展開) \ `(コマンド置換) !(ヒストリ)」が展開される。
' ' 内では、展開されない。
\ は直後の1文字の機能を無効化する

メタキャラクタ・特殊文字なら、他にも多数。
? * > >> < << | ~ & など

ただし、「! ~」は、bashのみ
0509デフォルトの名無しさん
垢版 |
2016/02/17(水) 00:23:01.67ID:wnysiCN2
なんと!もう発売されていましたか!
0510デフォルトの名無しさん
垢版 |
2016/02/23(火) 20:40:57.84ID:RqQoWDN5
これからPerlを学ぶメリットってある?
0512デフォルトの名無しさん
垢版 |
2016/02/24(水) 02:40:25.37ID:lkPqYQmC
UNIXの歴史をエッセンスにしてUNIX以外でも使えるようにした言語だから学ぶ価値はある。
おれの場合はWindows上で毎日使ってる。慣れの問題もあるが他の言語だとこうはいかない。
0514デフォルトの名無しさん
垢版 |
2016/02/24(水) 05:22:56.15ID:0U45vlYv
バージョンをきにしなくていいなら、Perlは、Windows 2000のパソコンでもつかえる。
現在のRubyは、インストーラがうごかない。インストーラがうごいても、実行時にDLLがどうのこうのいってエラー
Pythonも同様だろう、インストールがめんどくさいのは、損ですよ

Ruby, PythonでもCygwinならいけるかも
Cygwinがきらいなひとは、こまります
0516デフォルトの名無しさん
垢版 |
2016/02/26(金) 20:40:22.77ID:S1uVBK59
今時Cigwinなんて使ってるやついるの?
使う理由が見当たらないんだけど…。
0522デフォルトの名無しさん
垢版 |
2016/02/28(日) 11:39:02.77ID:w1saw6Ta
>>521
その場合、Perlの部分は同じ。違うのは cmd.exe と bash (またはzsh) なので
コマンドプロンプトで出来ないこととは、シェルとシェルスクリプトの実行ということになる。

つまりbash(zsh)の快適な操作性が、cmd.exeにはない。
LinuxやMacで動くシェルスクリプトがcmd.exeでは動かない。
0523デフォルトの名無しさん
垢版 |
2016/02/28(日) 22:48:20.46ID:Ozi57itY
パスに日本語使わない運用ならね
でもそれって制限きついよね?仕事で使うのはまず無理だな
0524デフォルトの名無しさん
垢版 |
2016/02/28(日) 23:03:09.55ID:w1saw6Ta
そういやcygwinはファイル名に日本語ついていても
ちゃんと動くよな。凄いことだよな。

>>523
お前何の話してんのー?
0526デフォルトの名無しさん
垢版 |
2016/07/18(月) 23:24:13.82ID:RVsoZVBC
ロブ・パイク語録。
>「UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている」 - 1991年ごろ
(中略)
>「そういった日々は過ぎ去り、賛辞は Perl にもたらされた」 - [7] 単機能ツールについて
賛辞は Perl にもたらされた!
0528デフォルトの名無しさん
垢版 |
2017/04/14(金) 21:43:32.26ID:zXRfLbO9
win7でactiveperl
`コマンド` からの応答をファイルに書き出したい
テキストならうまくいくけど、バイナリで失敗する
書き出し用のファイルはbinmodeにしてるので、受取側がおかしい
binmode STDIN
にはしてるけど変わらないみたい

C:> コマンド > file.bin
でリダイレクトすると成功するので、コマンド自体はちゃんと動いてる

何が悪いんだろう
0530デフォルトの名無しさん
垢版 |
2017/04/14(金) 22:32:15.06ID:zXRfLbO9
バイナリエディタとか無いから詳しくは判らないけど、
pptファイルを開こうとしても怒られる
0533デフォルトの名無しさん
垢版 |
2017/04/15(土) 15:50:50.88ID:40tq7pz4
exe単体のもあるしそれさえアウトでも家の環境で再現させられるだろ
つか業務関連なら会社で聞けば
0534デフォルトの名無しさん
垢版 |
2017/04/15(土) 16:02:38.46ID:4y1tBhnC
知らないなら黙ってればいいのに

何かバイナリを標準出力に吐くコマンドなら何でも試せる筈
なかなかそういうサンプルが無いけど
0536デフォルトの名無しさん
垢版 |
2017/04/15(土) 20:14:19.75ID:4y1tBhnC
これだけの情報で判らないならコード見ても判らないよ

binmode STDIN;
$result = `SomeCom.exe`;
open $out, '>', 'outfile.bin';
binmode $out;
print $result;

これだとNGで、
C:> SomeCom.exe > outfile.bin
これならOKになる
0538デフォルトの名無しさん
垢版 |
2017/04/15(土) 21:14:47.45ID:klGQGN6C
>>536
どう見ても標準出力に吐いてるんだけどそのコードで再現することは当然確認したんだよね?
0540デフォルトの名無しさん
垢版 |
2017/04/16(日) 00:22:01.12ID:h3ZKvGOL
open $in, '-|', 'SomeCom.exe';
binmode $in;
$result = <$in>;

こんな感じか
` ` を使う限り解決できない?
0541デフォルトの名無しさん
垢版 |
2017/04/16(日) 00:23:16.22ID:h3ZKvGOL
あ、違う
@result に受けて結合か
そこでもまた改行コードが何かしそうな不安が
0542デフォルトの名無しさん
垢版 |
2017/04/17(月) 21:59:30.64ID:MMDneckh
>>539が正解でした
ちなみに、結果を変数に受ける必要はなくて、
入力から出力にそのまま流す方がスマート
0543デフォルトの名無しさん
垢版 |
2017/04/23(日) 22:19:57.91ID:RpWO8O1f
答えを知ってる人はシンプルにいきなり正解のみを示すんだよな

で、必要な知識のない人が見当違いのことをいろいろ書いて掻き回す
0544デフォルトの名無しさん
垢版 |
2018/02/16(金) 06:37:50.13ID:W1XJdyx1
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
0545デフォルトの名無しさん
垢版 |
2018/02/16(金) 20:54:02.63ID:YSXjevvC
あれ?そういやこのスレは消化されないまま残ってたの?ちょっと前に63箱目が1000になったんだけど。
じゃあ新スレ立てずにそのままここ使う?
0546デフォルトの名無しさん
垢版 |
2018/02/17(土) 13:11:36.41ID:m8W4h2UJ
>>545 ここで良いんじゃない?

Windows7 で ActivePerl 5.16.3 を使っているんだけど、改行が CR LF (0D 0A) のファイルを
<> で読み込むと、行末が LF (0A) だけになる。これはなぜに?
0549デフォルトの名無しさん
垢版 |
2018/02/19(月) 12:04:01.90ID:9O6KBvIf
63箱目のテンプレこぴっとく

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板: http://kohada.2ch.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.18.2)

▼前スレ
0551デフォルトの名無しさん
垢版 |
2018/02/20(火) 09:05:34.87ID:67uqfrCT
これが次スレになったのね。
おいらもそうだが、
最近、スレが立てられなくなった人が多いのかな?
0552デフォルトの名無しさん
垢版 |
2018/02/20(火) 10:46:08.66ID:vE/Q7KOY
>>550
もしやあなたはCGIとPerlの区別がつかない人?
0553デフォルトの名無しさん
垢版 |
2018/03/03(土) 15:00:12.27ID:y3R+TCM+
websocketをやってみたいんですが、Net::WebSocketというのとProtocol::WebSocketというのが検索で掛かります。
どっちを使うのでしょうか
0554デフォルトの名無しさん
垢版 |
2018/03/03(土) 15:02:25.59ID:y3R+TCM+
サーバにしたいです
0556デフォルトの名無しさん
垢版 |
2018/03/05(月) 16:53:07.80ID:vyqV3ojD
>>555
フレームワークは勉強の為に避けようと思います。
0557デフォルトの名無しさん
垢版 |
2018/03/05(月) 18:51:20.07ID:p13q4iUt
正直websocketやるのにPeal選ぶ意味は無い気がする
やりたいってんなら止めないけど
node.jsとかgoでいいような
適材適所というか
0558デフォルトの名無しさん
垢版 |
2018/03/06(火) 11:48:05.65ID:tpILJMN5
汎用的なものが作れないかと思っています。
スピードを求めるならjavaで作ろうと思います。
0560デフォルトの名無しさん
垢版 |
2018/03/18(日) 10:31:45.09ID:cNEg10A5
perlでサーバーAで計算した値をサーバーBに送り表示することってできますか?
できるならどうやるんですか?
できればモジュールなくても使える方法がいいです。
0561デフォルトの名無しさん
垢版 |
2018/03/18(日) 11:47:09.15ID:JGqM6rnc
サーバーAで計算した値をサーバーBに送るとはどういうことか、何に表示したいのか
perlの前にここを明らかにした方がいい
0562デフォルトの名無しさん
垢版 |
2018/03/18(日) 12:33:37.42ID:cNEg10A5
>>561
もっとわかりやすいように質問変更する
サーバーAでログインIDとパスワード入力して
サーバーBに置いてあるユーザー情報と比較してログイン成功なら
サーバーAにログイン成功だと言う情報を送りたい
こういうこと
0563デフォルトの名無しさん
垢版 |
2018/03/18(日) 13:33:56.77ID:JGqM6rnc
use HTTP::Tiny; # v5.14から標準モジュール

my $response = HTTP::Tiny->new->post_form('サーバーBのURL', {id => $id, password => $password});

if ($response->{success}) {
  print '成功';
}
else {
  print '失敗';
}

----------
AからBに問い合わせてその結果をAで使うならこんな感じで行けるんじゃない
0566デフォルトの名無しさん
垢版 |
2018/03/18(日) 20:51:03.76ID:Cc3+LG/u
鯖へのログインなのか、それともHTMLページ等でのログインなのかも分からん
0567デフォルトの名無しさん
垢版 |
2018/03/30(金) 12:35:13.04ID:5tmqHLck
Perlのソケット通信にて、とあるAPIへのリクエストに対して送られてきた全応答を全て取得した上で処理をしたいと思っています。

たとえば簡単な例だと
応答データ例:(00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10);
データは00〜FF全てを含み、終了は6連続"00 00 00 00 00 00"になった場合となります。
==
my $data = <$socket>; # data => 00 01 02 03 04 05 06 07 08 09 0a
my $data2 = <$socket>; # pending....
==
$/ = \x5;
my $data = <$socket>; # data => 00 01 02 03 04 05
my $data2 = <$socket>; # pending....
==
のように、$/に当たるデータで停止してしまいます。$data2は待てど暮らせど進みません。
また6バイトで1組なので、sysread($socket,$buf,6)や$socket->recv($buf,6,0)、recv($socket,$buf,6,0)
といった方法もしてみましたが、これら全てpending...状態で1こちらも待てど暮らせど進みませんでした。
一括で取得する方法はありませんでしょうか。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況