X



Perlについての質問箱 63箱目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2014/02/19(水) 23:36:23.29
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)

▼前スレ
Perlについての質問箱 61箱目
http://toro.2ch.net/test/read.cgi/tech/1381561905/
Perlについての質問箱 62箱目
http://toro.2ch.net/test/read.cgi/tech/1385039352/
0222デフォルトの名無しさん
垢版 |
2016/06/18(土) 14:58:07.42ID:h9LNivvl
>>221
俺は昨日から始めたんで確かなことは言えないけど、
DOSプロンプトだと、''で括ってもダメだったよ
(何か設定があるんだけど昨日からなんで...)
例えば、
perl -e 'print "hello"'

perl -e "print \"Hello World\n\""
ってしないと動かなかった
0223デフォルトの名無しさん
垢版 |
2016/06/18(土) 15:22:54.54ID:h9LNivvl
よくよく考えたら、コマンドプロンプトで''はいけるはず無いよね
だって、まずコマンドプロンプトで命令が解釈されるわけだから
'a b'だと、連続した文字列とはならずに
'aとb'の2つの引数が指定されたと受け取られちゃうわけだしね
0224デフォルトの名無しさん
垢版 |
2016/06/18(土) 15:30:14.88ID:xZeqh3Cr
Perl の文法上
"\n"
の代わりに
qq(\n)
と書けますよ……という話じゃないのかなあ。

とりあえず、ググって見つけたページ
http://thinca.hatenablog.com/entry/20100210/1265813598
http://up-cat.net/%25A5%25B3%25A5%25DE%25A5%25F3%25A5%25C9%25A5%25D7%25A5%25ED%25A5%25F3%25A5%25D7%25A5%25C8%25A4%25CE%25A5%25A8%25A5%25B9%25A5%25B1%25A1%25BC%25A5%25D7%25BB%25C5%25CD%25CD.html

相変わらずカオスなんですね。それがいやで Linux に乗り換えたのは前世紀のことなのに……
0225デフォルトの名無しさん
垢版 |
2016/06/18(土) 17:13:02.52ID:Q2VQ6qXf
DOS/Windowsコマンドプロンプトのクォートは "
UNIXのシェルのクォートは '
ただそれだけ
コマンドプロンプトのクォートとして "" を使っているから、Perl部分は
qq() を使ってる
0229デフォルトの名無しさん
垢版 |
2016/06/19(日) 20:43:06.86ID:p98kttl2
ファイルの中身じゃなくて、ファイル名をバイナリかなんかで扱いたいときはどうすれば良いでしょうか
どっかの国のどっか語でファイル名書いてあって、ファイル一覧を入手したら全部文字化けみたいな感じになってて困った
0230デフォルトの名無しさん
垢版 |
2016/06/19(日) 22:30:28.43ID:/GELYJ8A
まず、そのファイルが壊れてないかどうかエンコーディングが判らないことには確認しようがありません。
そして、そこに書かれているファイル名が正しいとしても、問題はそのファイル名で何をするかです。
ファイルを作成するとしたら少々困難を伴うと思いますが、何をしますか?
もう少し説明が欲しいです。
0231デフォルトの名無しさん
垢版 |
2016/06/19(日) 23:56:05.73ID:p98kttl2
1: ファイルは壊れてないです。あとファイルの中身はどうでも良くて困ってるのはファイルですね。

2: こちら側からバイナリを含めて希望してるのでそもそも文字コードは問わないです。
なおwindowsですので強制的な解釈としてはcp932でしょうか。文字かどうかは不明ですか。

3: 書いてある通り、ファイル一覧を入手したいです。(と言うよりすでにしました)。その時点での文字化けについてです。
0233デフォルトの名無しさん
垢版 |
2016/06/20(月) 01:52:28.59ID:3dbzY2ue
>>224
単にprintのあと改行したいだけなら、面倒なエスケープを避けてsayを使うのが楽だと思う。

perl -E ‘say “hoge”;’
0235デフォルトの名無しさん
垢版 |
2016/06/20(月) 02:14:22.79ID:JJJI2UNm
ちゃんと話を追ってればシングルクォートではコマンド文字列をperlに渡せないってことを理解できるのに
だから>>220では全体をダブルクォートで括ってるわけ
0236230
垢版 |
2016/06/20(月) 13:40:47.81ID:cF0IFcLP
>>231
「そのファイルが壊れてないか」と書いたのはファイル一覧のことだったんですが……
まあ、それは置いといて。
困っていると言われても、何をお望みなのかよく分かりません。
マルチバイト文字を作成者が意図した通りの文字として読みたいということなら、
やはりエンコーディングを知る必要があります。
そして、そのエンコーディングを扱うことが出来るソフトウェアと、もちろんフォントも必要です。
どんな環境で、どこからどのような手段で入手して、何をして文字化けだと思ったのか、
それがどうなるのが望みなのかを書いていただけないと、お役に立てそうもありません。
0237デフォルトの名無しさん
垢版 |
2016/06/20(月) 14:10:59.68ID:ppvG3ddJ
ファイル名はテキストだろ。
バイナリのファイル名など、聞いたことがない

フォントが無いだけで、たぶん正常だろ。
それか、ファイル一覧を表示している、端末の文字コードが違うだけ

そのファイル名をエディタにコピーして、色々な文字コードに変えて、試してみる
0238デフォルトの名無しさん
垢版 |
2016/06/20(月) 14:43:14.96ID:og12Zqf+
先日も申しましたが、ファイル名はOSの仕様によってcp932扱いで表示されたバイナリです。
windowsにおけるバイナリとテキストの違いは、改行など一部の文字の解釈です
すなわち、ファイル名を入手した時点で破損しています
0239デフォルトの名無しさん
垢版 |
2016/06/20(月) 15:21:44.17ID:7O0ObdXP
うーん・・・
関係ないけど
ハートマークのファイル名作ったけど、
ちゃんと表示できたよ
0240デフォルトの名無しさん
垢版 |
2016/06/20(月) 15:27:52.95ID:JJJI2UNm
>>238
「ファイルはテキストだが何のコードでエンコードされたものかわからん」をcp932で開いた
ではなくて
「cp932でエンコードしてしまって、もう元のファイルの情報は欠けてしまった文字化けファイル」を開いた
ってことか?
0242デフォルトの名無しさん
垢版 |
2016/06/20(月) 16:53:54.14ID:cF0IFcLP
もう一度聞くけど、どこからどのような手段で入手して、どうやって見てるの?
どうなってほしいの? 使ったソフトウェアの仕様はちゃんと理解できてるの?
0243デフォルトの名無しさん
垢版 |
2016/06/20(月) 23:26:05.47ID:og12Zqf+
Aディレクトリの中のファイル名をopendirでとってくる。
この時のファイル名ってどう言う扱い?バイナリ?テキスト?コードは?フラグは?
とってきたらそれがすでに破損してて開くこともできない。
0246デフォルトの名無しさん
垢版 |
2016/06/21(火) 12:21:49.21ID:yHwsrvxs
-------------------------------------------------------
Perl に関係ない話題は、以上で終了。
0247デフォルトの名無しさん
垢版 |
2016/06/22(水) 02:03:09.88ID:pkNIGL7K
>>ファイルの中身じゃなくて、ファイル名をバイナリかなんかで扱いたいときはどうすれば良いでしょうか
特別なことをしなければバイナリで扱うことになる。むしろファイル名は文字列では扱(え|わ)ない。
0248デフォルトの名無しさん
垢版 |
2016/06/22(水) 17:07:36.10ID:NJ9t5GVO
Perlを使って下記のように2文字半角スペースを入れたいのです。
0015000008006a3376 -> 00 15 00 00 08 00 6a 33 76

下記を教えて貰いましたが旨く出来ません・・・アドバイス願います。
$ perl -p -e 's/(..)/$1 /g;'
001500 -> 00 15 00
0249デフォルトの名無しさん
垢版 |
2016/06/22(水) 17:34:24.64ID:MK9gPhs4
いや、ちゃんとその通りになったけど……どううまくいかなかったの?
末尾にスペースが入っちゃいかんとかなら、方法はあるけど。
0251デフォルトの名無しさん
垢版 |
2016/06/22(水) 17:44:10.61ID:NJ9t5GVO
試したのは下記ですが、進まないと言うか終らないんです。
連続数字は変えますが・・・123456に変更
perl -p -e 's/ 123456/$1 /g;'

perl -p -e 's/(123456)/$1 /g;'

perl -p -e 's/( 123456)/$1 /g;'

perl -p -e 's/\(123456\)/$1 /g;'
0253デフォルトの名無しさん
垢版 |
2016/06/22(水) 19:34:58.14ID:NJ9t5GVO
>>252
色々と試行錯誤した中で試してみましたが、ドットを入れるならスペース入れても
同じような・・・
perl -p -e 's/(12.34.56)/$1 /g;'
0254デフォルトの名無しさん
垢版 |
2016/06/22(水) 19:45:27.49ID:9eEpB7QB
もう連続した数値を2桁ずつ区切るとは話が違ってきてるぞ
まあ色々試しているんだろうが、まず正規表現をちゃんと勉強した方が結局は早道だよ
0255デフォルトの名無しさん
垢版 |
2016/06/22(水) 20:13:59.90ID:SZhXzwW9
>>253
正規表現を使っているという事は理解してる?
ドット一つは「任意の一文字」を意味しているのだけれども…
0257デフォルトの名無しさん
垢版 |
2016/06/22(水) 20:36:25.70ID:jdKVcriH
s/(..)/$1 /g

( ) で囲むと、キャプチャーできて、$1〜9 で後方参照できる。
. は、任意の1文字だから、.. で2文字

その2文字を、$1で参照して、その後ろに、半角空白を付けている。
$1の後ろに、半角空白があるだろ

g(global)フラグは、すべて置換する

だから、ab なら、ab半角空白 となる。
正規表現の説明を参照
0258デフォルトの名無しさん
垢版 |
2016/06/22(水) 20:38:53.55ID:q7cmPaAS
質問者は本当にやりたいことを隠して質問してるからもうどおでもいいけど
なぜ  perl -p -e 's/(..)/$1 /g;' でうまくいっちゃうんだろうね。

ぱっと見だと
001500 -> 00 01 15 50 00
になってもおかしくないのになと思った。
0259デフォルトの名無しさん
垢版 |
2016/06/22(水) 21:11:10.25ID:NJ9t5GVO
>>249->>258 皆さまスレ汚してすみませんでした。
Perlは使うばかりで、プログラミングはど素人です。
(..)は顔文字だと思っていました・・・お恥ずかしい

○○○@H170M-PLUS ~
$ perl -p -e 's/(..)/$1 /g;'
123456
12 34 56

あ〜スッキリした。
有難うございました。
0260デフォルトの名無しさん
垢版 |
2016/06/22(水) 22:35:11.08ID:jdKVcriH
>>258
1234なら、12 23 34 にはならない

.. は2文字に一致するから、12に一致する。
すると次は、3からスタートするから、34に一致する

つまり、一致した次の文字から、スタートする
0261デフォルトの名無しさん
垢版 |
2016/06/22(水) 23:26:29.09ID:q7cmPaAS
なるほろー。
最初はこんな感じが頭にうかんだけど冗長だね。ワンライナー3級ですな。
perl -ne 'for( $i = 0; $i < length() ; $i += 2 ){ print substr($_,$i,2)" " }'
0263259
垢版 |
2016/06/23(木) 10:28:45.02ID:mgh0+o+/
>>262 _(_^_)_ m(_ _)m
0264デフォルトの名無しさん
垢版 |
2016/06/23(木) 14:28:28.61ID:Fa0lhzij
>>243
もう見てないと思うけど、一応書いとくよ。君はまず、
Perl readdir Windows
でググってみるべきだった。
0265デフォルトの名無しさん
垢版 |
2016/06/28(火) 23:22:27.94ID:sQcX3Fgh
複数の文字列フィルタ (grep や s) を連続で通す書き方って、どうだったっけ?
ある文字列を
 ・grep でフィルタ → grep で再度フィルタ → s で置換 → split で分割 → 先頭要素だけスカラー変数に格納
これをスマートに(可能ならば1行で)やりたい。
0266デフォルトの名無しさん
垢版 |
2016/06/28(火) 23:31:42.78ID:IoEHfO5D
@result = map {(split //)[0]} map {s//;$_} grep {} grep {} @strings;
こんな雰囲気でええんでないかい?
0268デフォルトの名無しさん
垢版 |
2016/07/02(土) 14:22:47.36ID:UtcihNE2
基本的に日本語で書いたときの逆順に記述するだけなんだけどね
マニュアル読んで分からなければたぶん無理だろう
0270デフォルトの名無しさん
垢版 |
2016/07/04(月) 00:55:08.84ID:xC//1vCA
id="011"<width>1</width>

この文字列から011だけ正規表現で抜き出す方法教えてください
idの数値だけを抜き出したい
0272デフォルトの名無しさん
垢版 |
2016/07/04(月) 01:08:21.29ID:xC//1vCA
>>271
ありますが、かなり長いxmlなので必要だと思った部分だけ抜き出しました
もう少し抜き出してみるとこんな感じです

source="http://hogehoge.xml"; />
<name="foo" id="0110"

このような文字列が大量にあってそのなかからidの数値だけが欲しいです
0274デフォルトの名無しさん
垢版 |
2016/07/04(月) 22:53:37.85ID:0oVcG5wM
HTMLパーサーを使うのが一番簡単で正確
コメントの中にHTMLがあったらどうするんだ?

つーか正規表現を乱用するな。
0276デフォルトの名無しさん
垢版 |
2016/07/05(火) 17:36:47.05ID:QGn+r4HY
>>270 だとタグの外にあるように見えるのに >>272 ではタグの中になってる。
だから静観してたけど、結局どっちなの?
0277デフォルトの名無しさん
垢版 |
2016/07/05(火) 17:48:38.40ID:gL12vNid
なんか最初のだと後に<width>のある特定のidの値が欲しいのかな?って思ってたけど
そうでもなくて全部のidの値でいいんだってのが>>273でわかったんで拍子抜けしたところ
0279初心者です
垢版 |
2016/07/09(土) 07:48:40.33ID:g+Tip2fR
宜しくお願いします。

$ua->cookie_jar(HTTP::Cookies->new(file => "cookie.txt",autosave => 1));
でcookie.txtにクッキーを取得できるのは分かりますが
削除したい場合にはどのようなコードを書くんでしょうか?
0280デフォルトの名無しさん
垢版 |
2016/07/09(土) 16:55:14.14ID:ce8+Vk05
そういえばいつもお世話になってるのに知らないな……と思ってマニュアルを読んでみた。
どうやら clear を使うらしいな。まずは scan で中身を見てみるのが良さそうだ。
これ以上は説明のしようがない。自分で頑張ってほしい。
0281デフォルトの名無しさん
垢版 |
2016/07/09(土) 21:07:47.73ID:g+Tip2fR
ウィッス
0282デフォルトの名無しさん
垢版 |
2016/07/11(月) 17:00:44.97ID:ELH2iWp3
マルチプロセス処理の Parallel::Prefork は、
Windows の StrawberryPerl か ActivePerl に、インストール可能ですか?
http://pass.cpantesters.org/distro/P/Parallel-Prefork.html

Strawberry、Active、旧バージョン、32bit、64bitなど色々試したけど、
>Can't locate Parallel/Prefork.pm in @INC (you may need to install the Parallel::
>Prefork module) (@INC contains: C:/...
0284デフォルトの名無しさん
垢版 |
2016/07/14(木) 20:00:42.23ID:GgJblQeZ
突然文字が正しく表示できなくなるゴミPerl
人をイラつかせるために作られた言語だなこれ
存在価値がないどころか存在事態が害悪
早く消滅すればいいのに
0285デフォルトの名無しさん
垢版 |
2016/07/14(木) 20:06:36.90ID:GgJblQeZ
マジで使い物にならない
「ゴミPerlで文字がいきなり変になる対処」
「産廃Perlの文字取り扱いがおかしいのをなんとかする方法」
「糞Perlが文字をまともに扱えないことへの特効薬」
もう数時間検索してるが解決案が出てこない
こんなに酷い言語はPerlくらい
0286デフォルトの名無しさん
垢版 |
2016/07/14(木) 20:15:06.51ID:GgJblQeZ
Perlは本物のゴミ
文字すらまともに表示できないとか利用価値なし
0287デフォルトの名無しさん
垢版 |
2016/07/14(木) 20:25:10.95ID:GgJblQeZ
Perlのゴミなところ

文字「あ」すら表示すらできないためとてつもなくイライラする
0288デフォルトの名無しさん
垢版 |
2016/07/14(木) 20:28:38.21ID:GgJblQeZ
明日納品なのに解決する兆しなし
こういうときは一から書き直すことも多いが何千行もあるシステムを明日までに書き上げられるわけもない
本当にPerlはゴミすぎる
0289デフォルトの名無しさん
垢版 |
2016/07/14(木) 23:24:13.01ID:RqQ+21r9
だからバイナリで扱えと口が酸っぱくなるほど言ってきたわけで聞き入れないお前が悪い。
0291デフォルトの名無しさん
垢版 |
2016/07/15(金) 08:34:29.93ID:XWIPLqFW
テンプレの>>5 を誰かが勝手に変えたからだ。
元々はこうなっていた。
http://pc12.2ch.net/test/read.cgi/tech/1234181856/4
------------------------------------------------------------
# [Perl 日本語処理の基礎の基礎]
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO =>
0293デフォルトの名無しさん
垢版 |
2016/07/15(金) 09:08:17.43ID:ATzxunsm
とりあえず Data::Dumper と PerlIO::get_layers を使えば助けを求めるのに役立つと思うが
責任転嫁しかできないゴミに言ってもなぁ……
0294デフォルトの名無しさん
垢版 |
2016/07/15(金) 12:22:26.70ID:XWIPLqFW
>>285 それからな、
> ゴミPerl
> 産廃Perl
> 糞Perl
どれも、なかなかいいところを突いているが、ちょっと外れているな。
正解は「ガラクタ」だ。

Perl とは「pathologically eclectic rubbish lister」
(病的折衷主義のガラクタ出力装置)の 略なのだ。
0296デフォルトの名無しさん
垢版 |
2016/07/17(日) 01:45:28.71ID:T2eP0LKz
内部エンコードはperl独特だよね。
扱えれば入力と出力がどんなエンコードだろうが無双出来るけど
0297デフォルトの名無しさん
垢版 |
2016/07/17(日) 09:40:41.84ID:kAN9hSRv
>>294
「Perl を愛する人にとっては」と前置きするのを忘れてるぞ。
0298デフォルトの名無しさん
垢版 |
2016/07/17(日) 13:59:57.99ID:D/SlpqZf
まぁperlなんて使い物にならないでしょ

use utf8;付けたらそれまで文字化けしなかったUTF8の文字列が文字化けしたし
0300デフォルトの名無しさん
垢版 |
2016/07/17(日) 16:24:12.49ID:Cv1W2kE4
ではperlじゃないならなにがいいのかな。python?
rubyはパイプ記号が変なところで出てくるからちょっと違和感有り。
0302デフォルトの名無しさん
垢版 |
2016/07/17(日) 17:57:53.58ID:F+fhoGjl
賭けてもいいが、文字コードが分からないのをPerlのせいにしてるやつが、
自分で1からプログラミングしたら壊滅的な状況になると思う。
0304デフォルトの名無しさん
垢版 |
2016/07/18(月) 03:14:08.10ID:GZVIgCur
>賭けてもいいが、文字コードが分からないのをPerlのせいにしてるやつが、
>自分で1からプログラミングしたら壊滅的な状況になると思う。

意味不明な言動をする気違い。

「賭けてもいいが、腹が痛くなるのを残飯のせいにしてるやつが、
自分で1から料理したら壊滅的な状況になると思う。」

と言ってるのと同等で意味不明。
気違い。
0305デフォルトの名無しさん
垢版 |
2016/07/18(月) 07:46:08.11ID:C0GpTohk
自分で料理出来るのであれば、残飯なんて最初から食べないよ…
残飯を食べるという事は、食べざろうえない理由があっての事だろうに…
0307デフォルトの名無しさん
垢版 |
2016/07/18(月) 14:09:08.76ID:UhcVRSnP
高級料理も残せば残飯になるのさ。
最後の姿を見ただけで、本来の姿を判断するのは
無能というもの。
0308デフォルトの名無しさん
垢版 |
2016/07/19(火) 09:36:50.47ID:BbD/ZGSl
文字コードが分からないのをPerlのせいにしてるのは馬鹿の上限を突破してるが、
腹痛を残飯のせいにするのは間違ってないだろう。食ったと言う意味では馬鹿だが
0309デフォルトの名無しさん
垢版 |
2016/07/19(火) 14:33:33.84ID:kU2ISgr0
どんなに文字コードを理解している人間でも文字をまともに扱えないピログラム言語の前では無力
その程度のことも分からないのかはたまたPerlがまともな言語だと錯覚しているのか
もし錯覚しているならば自分の使っている言語についてほとんど何も知らないということになる
まずはその自覚をすべきである
0314デフォルトの名無しさん
垢版 |
2016/07/20(水) 20:04:27.70ID:y5BMpkOv
PHPってHTML言語じゃないの?比較の対象にもならないと思うんだが。
rubyに負けてるというならまだわかるけど。
0316デフォルトの名無しさん
垢版 |
2016/07/20(水) 23:37:17.38ID:E+SEwayU
>>314
HTML言語ってなんやw
HTMLに埋め込めるってだけでごく普通の
プログラム言語だぞ。

どれくらい普通かというと以下の機能が搭載されてる
・クラス
・インターフェース
・トレイト
・ラムダ
・クロージャー
・名前空間
・例外
・ジェネレーター
・ガベージコレクション

あと言語機能じゃないが、CLIプログラムの作成や
ウェブフレームワークなどもある。
0317デフォルトの名無しさん
垢版 |
2016/07/20(水) 23:43:45.09ID:lrew/2ZZ
>PHPってHTML言語
Perl厨は他の言語をロクに知りもしないで
敬遠してるんだろうな。
だからPerl厨はいつまで経っても
エンジニアとして半人前なのだろう。
0318デフォルトの名無しさん
垢版 |
2016/07/20(水) 23:47:10.52ID:E5afqhTD
309ではないがC言語。もちろんPerlもだ。
ついでなんで
s/ピログラム言語/プログラム言語/;
0319デフォルトの名無しさん
垢版 |
2016/07/20(水) 23:55:15.99ID:gGnx4FL9
Cって純粋なC?
ご冗談を。
あれは何も文字を扱ってないよ。
自分で作って下さい、ってね。
0320デフォルトの名無しさん
垢版 |
2016/07/20(水) 23:58:27.03ID:gGnx4FL9
>>316
だからなに?
その機能'(笑)はわざわざ書かなくてはならないことなの?
だから文字の扱いに対してもおかしな考えを持つんだね。
文字を扱うのは言語の機能(笑)が大事なんだってね。

基本プログラムが出来ない人はスクリプトが持つ機能とやらに注目したがる。
自分でプログラミングできないからね。
0321デフォルトの名無しさん
垢版 |
2016/07/21(木) 00:13:43.65ID:qEfVH42B
普通のunix処理系にperlは入ってるけどPHPは入ってないでしょ。
Webプログラミングなんてどうでもいい。システムプログラミングとか
テキストマイニングしたいんだって動機から入るとぱっと見PHPは目に入らないよ。
紹介がWeb用ですなんだし。
幼児的に誹謗中傷しないで諭すコミュ力をつけたほうが。。
■ このスレッドは過去ログ倉庫に格納されています

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