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/
探検
Perlについての質問箱 64箱目
レス数が950を超えています。1000を超えると書き込みができなくなります。
2019/02/01(金) 09:44:37.18ID:1/Kr4Qjk
896デフォルトの名無しさん
2020/12/22(火) 12:14:37.88ID:/kVuwMjM 演算子の前後に空白が必須なの、なんかイヤじゃない?
ツメツメで書きたいのに。
Perl6のころだけど、オレが降りた理由のひとつ。
ツメツメで書きたいのに。
Perl6のころだけど、オレが降りた理由のひとつ。
897デフォルトの名無しさん
2020/12/22(火) 16:09:49.34ID:Rxnt3reZ898デフォルトの名無しさん
2020/12/22(火) 16:21:28.35ID:Mi4b/BA1 言語なんて、他の言語のいいとこ取りで進化していくからな
常に便利になった部分と実験的な部分がある
常に便利になった部分と実験的な部分がある
899デフォルトの名無しさん
2020/12/27(日) 18:10:18.92ID:pJIjrBUp ローカルで一番最初にperlの呼び出しの部分は#!c:/Perl/bin/perl.exeって書くけど
サーバーに上げるときは毎回#!/user/local/perlというように書き直すのがめんどうだけど
#!/user/local.perlのまんまでもローカルで動かす方法ありますか?
サーバーに上げるときは毎回#!/user/local/perlというように書き直すのがめんどうだけど
#!/user/local.perlのまんまでもローカルで動かす方法ありますか?
900デフォルトの名無しさん
2020/12/27(日) 19:39:12.76ID:CEWAcbKQ あれ?
/usr/local/perlのままでもいけるんじゃないの?
Windowsはそこのパスを見てなかったような。
/usr/local/perlのままでもいけるんじゃないの?
Windowsはそこのパスを見てなかったような。
901デフォルトの名無しさん
2020/12/27(日) 19:46:23.03ID:/HQdSjMP Apacheは見てる
そんでApacheのあるドライブにuser/localのフォルダ作ってperl.exeをコピーしたら動くよ
そんでApacheのあるドライブにuser/localのフォルダ作ってperl.exeをコピーしたら動くよ
902デフォルトの名無しさん
2020/12/27(日) 21:30:33.15ID:CEWAcbKQ そうだっけか?
ちなみに、もしそのファイルに拡張子があるならレジストリで指定する方法もある。
「windows apache レジストリ 拡張子」で検索!
ちなみに、もしそのファイルに拡張子があるならレジストリで指定する方法もある。
「windows apache レジストリ 拡張子」で検索!
903デフォルトの名無しさん
2020/12/28(月) 00:11:42.69ID:oUNoRxKm perlプログラム中に指定するルートパスについてだけど
open(IN,"/test.html");
my @lines = <IN>;
print "@lines";
close(IN);
とやっても@linesは空で何も取得できなかったけど
print "<a href=\"/test.html\">リンク</a>";
でリンクをクリックするとちゃんとドキュメントルート直下のtest.htmlに飛べる
これはどうしてか?
test.htmlの中身は空ではない
open(IN,"/test.html");
my @lines = <IN>;
print "@lines";
close(IN);
とやっても@linesは空で何も取得できなかったけど
print "<a href=\"/test.html\">リンク</a>";
でリンクをクリックするとちゃんとドキュメントルート直下のtest.htmlに飛べる
これはどうしてか?
test.htmlの中身は空ではない
904デフォルトの名無しさん
2020/12/28(月) 00:28:09.86ID:AD+30T3D905デフォルトの名無しさん
2020/12/28(月) 08:24:52.02ID:oUNoRxKm906デフォルトの名無しさん
2020/12/28(月) 08:37:46.11ID:9b76uWwh ドキュンルート
907デフォルトの名無しさん
2020/12/28(月) 21:50:36.57ID:gLlPtDZl908デフォルトの名無しさん
2020/12/30(水) 20:09:27.64ID:ygO1FIcm 過疎ってる方が落ち着くという人もいるらしい
909デフォルトの名無しさん
2020/12/30(水) 20:26:20.53ID:ZDzqqnZf 初心者が嫌いな「上級者」で過疎っているほうが落ち着くなら、このスレがいいな。
【Perl上級者コーナーPart01】
https://medaka.5ch.net/test/read.cgi/php/1024741312/
【Perl上級者コーナーPart01】
https://medaka.5ch.net/test/read.cgi/php/1024741312/
910デフォルトの名無しさん
2020/12/30(水) 21:55:58.30ID:Fpo/gio8911デフォルトの名無しさん
2021/01/03(日) 17:25:22.42ID:Lv3VCxJc ブラウザのクッキーを許可してるかどうかを調べるにはどうしたらいいんですか?
クッキーを書き込めたら許可されているというやり方だと
書き込んだ直後はクッキー読み取れない
更新ボタンでページを更新しないとクッキー読み取れないので他のやり方で
クッキーを書き込めたら許可されているというやり方だと
書き込んだ直後はクッキー読み取れない
更新ボタンでページを更新しないとクッキー読み取れないので他のやり方で
912デフォルトの名無しさん
2021/01/03(日) 17:33:27.51ID:qCTYrijY お、今年初めの質問だね。
君の悩みは質問箱住人が解決するよ。
ささ、甘酒どぞ。つ甘
みんなーお客さんだよー。
君の悩みは質問箱住人が解決するよ。
ささ、甘酒どぞ。つ甘
みんなーお客さんだよー。
913デフォルトの名無しさん
2021/01/03(日) 19:13:07.92ID:fvS6UGyp >>911
javascript併用したくないならHTTPヘッダで
print "Set-Cookie: hoge\n";
print "Location: hage\\n\n";
みたいな感じでクッキー書いてリダイレクトすればいいんじゃね
javascript併用したくないならHTTPヘッダで
print "Set-Cookie: hoge\n";
print "Location: hage\\n\n";
みたいな感じでクッキー書いてリダイレクトすればいいんじゃね
914デフォルトの名無しさん
2021/01/03(日) 20:53:05.77ID:Lv3VCxJc >>913
なるほど、でもそれ無限ループにならないっすか?
なるほど、でもそれ無限ループにならないっすか?
915デフォルトの名無しさん
2021/01/03(日) 21:41:10.96ID:Y2yZ564Q916デフォルトの名無しさん
2021/01/03(日) 21:44:24.27ID:fvS6UGyp >>914
クエリパラメータ追加するなり工夫すれ
クエリパラメータ追加するなり工夫すれ
917532
2021/01/25(月) 02:03:08.62ID:NGykvctj ttps://perlcodesample.hateblo.jp/entry/2020/07/10/082720
918デフォルトの名無しさん
2021/02/13(土) 20:39:32.56ID:puXqs/bZ U+10000からU+1FFFFまでの文字があったら置換したい時はどう書けばいい?
919デフォルトの名無しさん
2021/02/13(土) 20:57:13.59ID:aGYlIUX0920デフォルトの名無しさん
2021/02/13(土) 21:54:38.37ID:puXqs/bZ あー
U+10000という文字列を置換したいのではなく、それが示すサロゲートペアを置換したい
U+10000という文字列を置換したいのではなく、それが示すサロゲートペアを置換したい
921デフォルトの名無しさん
2021/02/14(日) 01:36:58.65ID:u5RUQBwf >>920
s/([¥x{10000}-¥x{1ffff}])/unpack(q{U},$1)/eg
かな?
ダメな気もするが。
つーか、さっきのURLにいろいろ書いてあるから、一度目を通して自分で試してみろ。
んで、うまくいったら、結果を貼るようにな。
s/([¥x{10000}-¥x{1ffff}])/unpack(q{U},$1)/eg
かな?
ダメな気もするが。
つーか、さっきのURLにいろいろ書いてあるから、一度目を通して自分で試してみろ。
んで、うまくいったら、結果を貼るようにな。
922デフォルトの名無しさん
2021/02/14(日) 07:32:21.90ID:kRUK3Bbl $line =~ s/\x{1f306}/置/g;
これは成功する
$line =~ s/\x{1....}/置/g;
こんなことをやろうとしてた
$line =~ s/[\x{10000}-\x{1ffff}]/置/g;
これが正解だった
これは成功する
$line =~ s/\x{1....}/置/g;
こんなことをやろうとしてた
$line =~ s/[\x{10000}-\x{1ffff}]/置/g;
これが正解だった
923デフォルトの名無しさん
2021/02/14(日) 10:00:12.81ID:yrV2Bu9C Perlの場合、マルチバイト文字で正規表現を正しく使うには、あらかじめEncode::decode()でデコードしておく必要があるので厄介。
924デフォルトの名無しさん
2021/02/14(日) 11:18:28.10ID:u5RUQBwf925デフォルトの名無しさん
2021/03/03(水) 18:48:52.48ID:Q9ky3RP3 start:aaa1
end:bbb1
value:1.23
start:aaa2
end:bbb2
value:2.34
…
データとして上記のようなstart,end,value値が違うデータがだらっと繰り返ししてるファイルがあって
下記の正規表現で名前付きキャプチャを使って繰り返しマッチングし%+ハッシュを配列に格納したいのですが、こんな感じでやるとそれぞれのデータが順に入ってしまいます。
どう書けばマッチングした各ハッシュを配列に格納出来るのでしょうか?
$re=qr|start:(?<start>\S+).*?end(?<end>\S+).*?value:(?<value>\S+)$|sm;
my @data = m|$re|g =~ $txt;
end:bbb1
value:1.23
start:aaa2
end:bbb2
value:2.34
…
データとして上記のようなstart,end,value値が違うデータがだらっと繰り返ししてるファイルがあって
下記の正規表現で名前付きキャプチャを使って繰り返しマッチングし%+ハッシュを配列に格納したいのですが、こんな感じでやるとそれぞれのデータが順に入ってしまいます。
どう書けばマッチングした各ハッシュを配列に格納出来るのでしょうか?
$re=qr|start:(?<start>\S+).*?end(?<end>\S+).*?value:(?<value>\S+)$|sm;
my @data = m|$re|g =~ $txt;
926デフォルトの名無しさん
2021/03/03(水) 20:20:14.74ID:DgitZS9x 正規表現を使うところではない気がするな。w
ちょっとおちついて、行単位で処理していけよ。
ちょっとおちついて、行単位で処理していけよ。
927デフォルトの名無しさん
2021/03/03(水) 23:36:11.18ID:Q9ky3RP3928デフォルトの名無しさん
2021/03/04(木) 00:03:04.76ID:ls8aTj6l Ruby なら、
line_num = 0 # 行番号
# 行末の改行を削除して、1行ずつ処理する
results = File.foreach( "test154_data.txt", chomp: true ).with_object( [ ] ) do |line, accm|
line_num += 1
# 3行毎に、ハッシュを作って、蓄積変数に追加する
accm.push Hash.new if line_num % 3 == 1
ary = line.split( ':', 2 ) # 左からコロンで、2つに分割する
hash = accm.last # 最後の要素
hash[ ary[ 0 ] ] = ary[ 1 ]
end
p results
出力
[{"start"=>"aaa1", "end"=>"bbb1", "value"=>"1.23"},
{"start"=>"aaa2", "end"=>"bbb2", "value"=>"2.34"}]
line_num = 0 # 行番号
# 行末の改行を削除して、1行ずつ処理する
results = File.foreach( "test154_data.txt", chomp: true ).with_object( [ ] ) do |line, accm|
line_num += 1
# 3行毎に、ハッシュを作って、蓄積変数に追加する
accm.push Hash.new if line_num % 3 == 1
ary = line.split( ':', 2 ) # 左からコロンで、2つに分割する
hash = accm.last # 最後の要素
hash[ ary[ 0 ] ] = ary[ 1 ]
end
p results
出力
[{"start"=>"aaa1", "end"=>"bbb1", "value"=>"1.23"},
{"start"=>"aaa2", "end"=>"bbb2", "value"=>"2.34"}]
929デフォルトの名無しさん
2021/03/04(木) 00:11:02.54ID:Pkas/NOZ >>927
可不可の話なら、while (m/start..end/g) {...}みたいにしたらきっとできる。
しかし、オレならやらん。
Pythonは詳しくないが、たぶんそれでもやらんやろなあ。
正規表現の使いどころとしては非効率的だし、エラー対応が非現実的だし。
また、対象はファイルの内容だそうだが、ReDoSは知ってるか?
可不可の話なら、while (m/start..end/g) {...}みたいにしたらきっとできる。
しかし、オレならやらん。
Pythonは詳しくないが、たぶんそれでもやらんやろなあ。
正規表現の使いどころとしては非効率的だし、エラー対応が非現実的だし。
また、対象はファイルの内容だそうだが、ReDoSは知ってるか?
930デフォルトの名無しさん
2021/03/04(木) 00:24:13.90ID:u/riWi2o なんで急にRubyが出てくるんだよ(呆れ
931デフォルトの名無しさん
2021/03/04(木) 00:42:19.66ID:2AXWpxTy perlリスペクト公言言語だから敬意を評してるんじゃないかな、大目に見てあげよう
932デフォルトの名無しさん
2021/03/04(木) 09:09:52.94ID:8OZ033Zi 元がファイルだからなあ
1行ずつ分かれてるものを合体させてまた分離する、というのが無意味に見える
正規表現は柔軟性なので、使わなくていいくらいかっちりしてるものには
使わない方が安全側に倒れる
元ファイルが手書きで、無駄な改行やコメントが入ってるなら正規表現
1行ずつ分かれてるものを合体させてまた分離する、というのが無意味に見える
正規表現は柔軟性なので、使わなくていいくらいかっちりしてるものには
使わない方が安全側に倒れる
元ファイルが手書きで、無駄な改行やコメントが入ってるなら正規表現
933デフォルトの名無しさん
2021/03/07(日) 10:07:03.25ID:Anqe+9Rf forkがハングする。
見えてる範囲だと、memoryの使用量が関係してかもしれないです。
firefoxを使って1G程度メモリを食わせてからスクリプト走らせると、forkが返ってこなくなる。
この時のメモリ使用量は他も併せて25%程度。閉じてから再度走らせるとちゃんと動く。
エラー値返してくれたら助かるのだけど、ハングなんで困ってます。
アドバイスいただけるとたすかります。
Strawberry perl 64bit 5.32.1
Windows10Pro 64bit version 2004
Corei3-4370, Memory 12G
見えてる範囲だと、memoryの使用量が関係してかもしれないです。
firefoxを使って1G程度メモリを食わせてからスクリプト走らせると、forkが返ってこなくなる。
この時のメモリ使用量は他も併せて25%程度。閉じてから再度走らせるとちゃんと動く。
エラー値返してくれたら助かるのだけど、ハングなんで困ってます。
アドバイスいただけるとたすかります。
Strawberry perl 64bit 5.32.1
Windows10Pro 64bit version 2004
Corei3-4370, Memory 12G
934デフォルトの名無しさん
2021/03/07(日) 10:45:56.10ID:Q92Mc+WL 安定して動かないならバグっている
だいたい動くけど、ごく稀に動作がおかしい、ということがforkはある
forkがコケても動くような仕組みにすればok
だいたい動くけど、ごく稀に動作がおかしい、ということがforkはある
forkがコケても動くような仕組みにすればok
935デフォルトの名無しさん
2021/03/07(日) 10:50:58.30ID:x9JK9zFw そもそもWindows APIはfork()をサポートしてない。
936デフォルトの名無しさん
2021/03/07(日) 11:48:43.53ID:Anqe+9Rf >>934 ありがとう。
メモリ使用量が低いと成功。
firefoxでもタブ1枚ぐらいなら成功。
firefoxでタブ(yahoo.com)10枚開くと、確実にハング。
ラクダ本にも、失敗(戻り値undef)の対処法が書いてありますね。
WindowsOSがらみなので、イロイロありそうなのは察します。
でも、forkを呼び出したらハングして帰ってこないからなぁ。
コケるというよりは、forkを呼び出さない:
if( $can_fork ) {fork;}
ってな書き方が必要になってしまう。
メモリ使用量が低いと成功。
firefoxでもタブ1枚ぐらいなら成功。
firefoxでタブ(yahoo.com)10枚開くと、確実にハング。
ラクダ本にも、失敗(戻り値undef)の対処法が書いてありますね。
WindowsOSがらみなので、イロイロありそうなのは察します。
でも、forkを呼び出したらハングして帰ってこないからなぁ。
コケるというよりは、forkを呼び出さない:
if( $can_fork ) {fork;}
ってな書き方が必要になってしまう。
937デフォルトの名無しさん
2021/03/07(日) 11:53:44.14ID:Anqe+9Rf 追記:
perlスクリプトとfirefoxは関係ありません。
単に、デスクトップで調べものしながら、コマンドプロンプトでperlインタプリタ
を起動して作業しているだけです。連投失礼しました。
perlスクリプトとfirefoxは関係ありません。
単に、デスクトップで調べものしながら、コマンドプロンプトでperlインタプリタ
を起動して作業しているだけです。連投失礼しました。
938デフォルトの名無しさん
2021/03/07(日) 12:10:59.62ID:3xq9+JKJ ActivePerl の Windows 版では fork() がエミュレーションされているらしい。
実際に呼び出してみるとスレッドがひとつ増える。
中ではおおかた CreateThread() でもしてるんだろう。
実際に呼び出してみるとスレッドがひとつ増える。
中ではおおかた CreateThread() でもしてるんだろう。
939デフォルトの名無しさん
2021/03/07(日) 12:24:40.47ID:xy+MS7Fg windowsで安定動作させたいならforkを使わずに自分で別スレッドか別プロセス立てるのが吉
940デフォルトの名無しさん
2021/03/07(日) 14:22:59.45ID:Anqe+9Rf941デフォルトの名無しさん
2021/03/07(日) 14:48:48.37ID:Q92Mc+WL forkとか再帰呼び出しとか、魔術的で楽しいけど、大抵罠にはまる
942デフォルトの名無しさん
2021/03/07(日) 17:38:53.17ID:quYd9iFF 再帰はええやろ。
forkはもともとUNIX用で、Windowsとは相性が激悪なだけやから、しゃあない。
forkはもともとUNIX用で、Windowsとは相性が激悪なだけやから、しゃあない。
943デフォルトの名無しさん
2021/03/07(日) 17:49:12.06ID:Q92Mc+WL 階層ディレクトリを辿る、みたいなとこに再帰を使うと止まらなくなったりする
絶対止まると保証されてるとこにしか使えなくて、そういうのは別に再帰でなくてもやれる
隅々までどうなってるか判らないものに再帰は威力を発揮するけど、
そういうのは往々にして停止性が保証されない
絶対止まると保証されてるとこにしか使えなくて、そういうのは別に再帰でなくてもやれる
隅々までどうなってるか判らないものに再帰は威力を発揮するけど、
そういうのは往々にして停止性が保証されない
944デフォルトの名無しさん
2021/03/07(日) 18:11:41.00ID:eIiM+J9a それはあんたが無能だから
945デフォルトの名無しさん
2021/03/07(日) 18:18:17.98ID:x9JK9zFw Perlと関係ない話はよそでどうぞ
946デフォルトの名無しさん
2021/03/07(日) 23:39:46.89ID:quYd9iFF947デフォルトの名無しさん
2021/03/07(日) 23:53:02.15ID:Q92Mc+WL 軽く考えてるけど、プログラムの停止性ってもっそい奥が深い
ゲーデルの不完全性定理と密接に絡んでる
ゲーデルの不完全性定理と密接に絡んでる
948デフォルトの名無しさん
2021/03/08(月) 00:03:00.68ID:RDgJTpCR tarのhオプションってよくできているよな
無限ループに陥りやすいが
無限ループに陥りやすいが
949デフォルトの名無しさん
2021/03/08(月) 00:23:56.56ID:tQicr2bh 再帰処理は考えてるの楽しいよな
実装するかとなると状況次第
実装するかとなると状況次第
950デフォルトの名無しさん
2021/03/08(月) 01:47:35.66ID:6lKYXbK2951デフォルトの名無しさん
2021/03/08(月) 10:04:20.07ID:XzCJxGl3 ggl先生に "perl dir tree" で検索かけたら自作ページが多いね。
安心安全鉄板ライブラリとかってあるかな?
素人考えでなんだけど・・・OS別、FS別なんてあるんかの。
安心安全鉄板ライブラリとかってあるかな?
素人考えでなんだけど・・・OS別、FS別なんてあるんかの。
952デフォルトの名無しさん
2021/03/08(月) 10:17:22.69ID:SORPad+v 親にリンクしていてループするのが困るので、
全部の子に対してカウンタを持たせる、くらいしか回避方法が無いんだよな
それだと再帰でやってるうまみが無くなってしまう
全部の子に対してカウンタを持たせる、くらいしか回避方法が無いんだよな
それだと再帰でやってるうまみが無くなってしまう
953デフォルトの名無しさん
2021/03/08(月) 12:03:45.46ID:JySUELLY 素直にFile::Find使っとけ
954デフォルトの名無しさん
2021/03/08(月) 12:34:19.76ID:SORPad+v dir /s の結果を使うのが一番楽
955デフォルトの名無しさん
2021/03/08(月) 16:27:27.25ID:3P7OMB5d File::Findは処理速度が遅いのが難
956デフォルトの名無しさん
2021/03/08(月) 17:21:12.95ID:6lKYXbK2957デフォルトの名無しさん
2021/03/08(月) 17:24:47.95ID:6lKYXbK2958デフォルトの名無しさん
2021/03/08(月) 17:40:53.14ID:SORPad+v ディレクトリならどこかにある実体のコピーだろうから、リンクなんか無しで済むけど、
より一般化したリスト構造だったら辿らない訳にいかない
だから、事前にループしていないことを確認してから処理することになって、
そのテストがループにはまる
より一般化したリスト構造だったら辿らない訳にいかない
だから、事前にループしていないことを確認してから処理することになって、
そのテストがループにはまる
959デフォルトの名無しさん
2021/03/08(月) 20:06:16.14ID:3P7OMB5d >>957
試してみたが、no_chdirは関係ない。
File::Findは、dir /S /B コマンドのパイプ読み取りに比べて、3倍も時間がかかる。
File::Findは遅いだけでなくコールバックでユーザー変数を扱えない欠点があるから、私はFile::Findを使わない。
試してみたが、no_chdirは関係ない。
File::Findは、dir /S /B コマンドのパイプ読み取りに比べて、3倍も時間がかかる。
File::Findは遅いだけでなくコールバックでユーザー変数を扱えない欠点があるから、私はFile::Findを使わない。
960デフォルトの名無しさん
2021/03/08(月) 21:30:38.88ID:3P7OMB5d File::FindはUnix系OSで使う場合は find コマンドのパイプ読み取りと同等か少し速い。
File::Findが明確に遅いのはWindows向けにビルドされたPerlの場合のみ。
File::Findが明確に遅いのはWindows向けにビルドされたPerlの場合のみ。
961デフォルトの名無しさん
2021/03/08(月) 22:05:40.64ID:6lKYXbK2962デフォルトの名無しさん
2021/03/08(月) 22:39:10.09ID:3P7OMB5d >>961
残念ながらネイティブに最適化されているはずのActivePerl や Strawberry Perl でFile::Findが遅い。
原因は知らないけどWin32APIの使い方が良くないからだと思う。
残念ながらネイティブに最適化されているはずのActivePerl や Strawberry Perl でFile::Findが遅い。
原因は知らないけどWin32APIの使い方が良くないからだと思う。
963532
2021/03/09(火) 00:11:34.07ID:jxvXMO9/ $^WIN32_SLOPPY_STAT じゃね?
File::FindはWindowsだと、SJISで全角「構」などの2バイト目が\(0x5c)のフォルダに遭遇すると
無限loopしたり誤動作するから、結局Wndowsでフォルダ階層を再帰的にたどるには
utf8化したperl sourceで自分でopendir, readdirして、encode, decodeせにゃならん。
File::FindはWindowsだと、SJISで全角「構」などの2バイト目が\(0x5c)のフォルダに遭遇すると
無限loopしたり誤動作するから、結局Wndowsでフォルダ階層を再帰的にたどるには
utf8化したperl sourceで自分でopendir, readdirして、encode, decodeせにゃならん。
964532
2021/03/09(火) 00:15:08.81ID:jxvXMO9/ 別件だがWindowsではSJISで全角「構」などの2バイト目が\(0x5c)のフォルダには
perlからlstatやutimeが出来ないみたいで難儀した。
Linuxのutf8のファイルシステムと違ってWindowsのSJISファイルシステムは面倒
perlからlstatやutimeが出来ないみたいで難儀した。
Linuxのutf8のファイルシステムと違ってWindowsのSJISファイルシステムは面倒
965デフォルトの名無しさん
2021/03/09(火) 01:17:12.50ID:B0uPByTP966928
2021/03/09(火) 05:19:08.22ID:NUN2sKP0 >>925
Ruby で、元のファイルを、CSV へ変換してみた。
データ中に、ダブルクォーテーション・カンマを入れても、正常に動く
require 'csv'
line_number = 0 # 行番号
# 行末の改行を削除して、1行ずつ処理する。蓄積変数は2次元配列
results = File.foreach( "input.txt", chomp: true ).with_object( [ ] ) do |line, accm|
line_number += 1
accm.push [ ] if line_number % 3 == 1 # 3行毎に、空配列を追加する
ary = line.split( ':', 2 ) # 左からコロンで、2つに分割する
last = accm.last # 最後の要素 (配列)
last.push( ary[ 1 ] ) # コロンの右側を、配列に追加する
end
results.unshift %w(start end value) # 先頭に、ヘッダー行を追加する
# p results
csv_str = results.map( &:to_csv ).join # 2次元配列を、CSV 文字列に変換する
print csv_str
出力
start,end,value
a_1,"b""1",1
"a,2",b_2,2.34
Ruby で、元のファイルを、CSV へ変換してみた。
データ中に、ダブルクォーテーション・カンマを入れても、正常に動く
require 'csv'
line_number = 0 # 行番号
# 行末の改行を削除して、1行ずつ処理する。蓄積変数は2次元配列
results = File.foreach( "input.txt", chomp: true ).with_object( [ ] ) do |line, accm|
line_number += 1
accm.push [ ] if line_number % 3 == 1 # 3行毎に、空配列を追加する
ary = line.split( ':', 2 ) # 左からコロンで、2つに分割する
last = accm.last # 最後の要素 (配列)
last.push( ary[ 1 ] ) # コロンの右側を、配列に追加する
end
results.unshift %w(start end value) # 先頭に、ヘッダー行を追加する
# p results
csv_str = results.map( &:to_csv ).join # 2次元配列を、CSV 文字列に変換する
print csv_str
出力
start,end,value
a_1,"b""1",1
"a,2",b_2,2.34
967デフォルトの名無しさん
2021/03/09(火) 08:00:45.91ID:4CK4kuWA コマンドプロントはとっくにUTF-16対応している。出力フォントが表示に対応していないだけ。
コマンドプロントにはもう機能追加されないから Windows Terminalに乗り換えたほうがいい。
コマンドプロントにはもう機能追加されないから Windows Terminalに乗り換えたほうがいい。
968デフォルトの名無しさん
2021/03/09(火) 08:27:17.16ID:4CK4kuWA コマンドプロントは今でもすでに非システムコード文字(アラビア文字やハングルなど)をコマンドに引数渡しできる。
受け取る側のアプリがUTF-16形式で起動時の引数を取らなかったり、batファイルが非システムコード文字に対応していないだけ。
コマンドプロントの努力だけではどうしようもない。
なお、Windows向けビルドされたJavaやPerlは非システムコード文字を引数で受け取れない制約がある。
プログラム側で自力でbase64エンコード対応するなどして回避するしかない。
一方、Windows向けビルドされたPythonは非システムコード文字を引数で受け取ることができる。
Pythonのプラグインを作ったことある人なら分かると思うが、Pythonはインターフェース間の文字列のやりとりにUTF-16を使っている。
受け取る側のアプリがUTF-16形式で起動時の引数を取らなかったり、batファイルが非システムコード文字に対応していないだけ。
コマンドプロントの努力だけではどうしようもない。
なお、Windows向けビルドされたJavaやPerlは非システムコード文字を引数で受け取れない制約がある。
プログラム側で自力でbase64エンコード対応するなどして回避するしかない。
一方、Windows向けビルドされたPythonは非システムコード文字を引数で受け取ることができる。
Pythonのプラグインを作ったことある人なら分かると思うが、Pythonはインターフェース間の文字列のやりとりにUTF-16を使っている。
969デフォルトの名無しさん
2021/03/09(火) 08:33:53.42ID:HJK4uNxM UTF-16も嬉しくない
970532
2021/03/09(火) 08:45:38.83ID:UTQZC5u1 NTFSってUTF-16だったのか、
しかしperlのreaddirはcp932で返してきているような気がs…
しかしperlのreaddirはcp932で返してきているような気がs…
971デフォルトの名無しさん
2021/03/09(火) 09:28:02.71ID:HJK4uNxM NTFSはUCS-2で、windowsがUTF-16
それをわざわざcp932に変換して寄越す
それをわざわざcp932に変換して寄越す
972デフォルトの名無しさん
2021/03/09(火) 10:42:13.66ID:4CK4kuWA NTFSもUTF-16だと思うよ。
973デフォルトの名無しさん
2021/03/09(火) 10:44:51.95ID:SbXzcieK >>968
> コマンドプロントの努力だけではどうしようもない。
そらそうや。
ついにcp932から離れようとする世の方向性を受けて、Perlも変わるんじゃねえの、という話。
Perl7とかでそういう話は出てないんかな?
知らんけど。
> なお、Windows向けビルドされたJavaやPerlは非システムコード文字を引数で受け取れない制約がある。
制約つーか、むしろ互換維持とかただ昔のままほったらかしとかやろ。w
> コマンドプロントの努力だけではどうしようもない。
そらそうや。
ついにcp932から離れようとする世の方向性を受けて、Perlも変わるんじゃねえの、という話。
Perl7とかでそういう話は出てないんかな?
知らんけど。
> なお、Windows向けビルドされたJavaやPerlは非システムコード文字を引数で受け取れない制約がある。
制約つーか、むしろ互換維持とかただ昔のままほったらかしとかやろ。w
974デフォルトの名無しさん
2021/03/09(火) 10:56:11.55ID:SbXzcieK975デフォルトの名無しさん
2021/03/09(火) 12:55:12.46ID:NUN2sKP0 Windows 10 Home でも、Docker が出来るようになった。
ただし、Windowsの連続更新に、3時間も掛かったけど
WSL2, Ubuntu でも使えば?
漏れは、Ruby on Rails をやってる
Linux側には、日本人が作った、バージョンマネージャーのanyenv で、
rbenv, nodenv を使って、ruby 2.6.6, node 12.16.2 も入れた
Dockerでも良いし。
ただし、メモリ8GB じゃキツイ。16GB は欲しい
ただし、Windowsの連続更新に、3時間も掛かったけど
WSL2, Ubuntu でも使えば?
漏れは、Ruby on Rails をやってる
Linux側には、日本人が作った、バージョンマネージャーのanyenv で、
rbenv, nodenv を使って、ruby 2.6.6, node 12.16.2 も入れた
Dockerでも良いし。
ただし、メモリ8GB じゃキツイ。16GB は欲しい
976デフォルトの名無しさん
2021/03/09(火) 20:18:30.71ID:BijZjsz/ 正規表現のパターンの中に変数を書くとおかしくなりますが、どうしたらいいでしょうか。
やりたいこと:「hoge」の後ろがカンマか行末の場合を抽出したい
$pat = "hoge[,\$\]";
if( $str =~ m/$pat/ ){...}
こう書くと $pat が「hoge[,$]」になることはデバッガで確認できたのですが、思った通りのマッチになりません。マッチングの部分に $pat ではなく定数で「hoge[,$]」と書けばマッチングします。
どう書いたらいいでしょうか?
やりたいこと:「hoge」の後ろがカンマか行末の場合を抽出したい
$pat = "hoge[,\$\]";
if( $str =~ m/$pat/ ){...}
こう書くと $pat が「hoge[,$]」になることはデバッガで確認できたのですが、思った通りのマッチになりません。マッチングの部分に $pat ではなく定数で「hoge[,$]」と書けばマッチングします。
どう書いたらいいでしょうか?
977デフォルトの名無しさん
2021/03/09(火) 20:28:25.57ID:HJK4uNxM なんで ] だけエスケープしてるの?
978デフォルトの名無しさん
2021/03/09(火) 20:34:49.51ID:nUvu3sQ4 そういうときの為のqrですよ
979デフォルトの名無しさん
2021/03/09(火) 20:36:21.19ID:XI91xcQL []内は文字セットだからその$は行末マッチじゃないし
980976
2021/03/09(火) 22:41:12.95ID:BijZjsz/981デフォルトの名無しさん
2021/03/09(火) 22:43:46.86ID:HJK4uNxM {0,1}って?と等価だよね
982デフォルトの名無しさん
2021/03/09(火) 23:03:58.63ID:B0uPByTP983デフォルトの名無しさん
2021/03/10(水) 02:28:31.13ID:ixLG+AYE hoge(,|$)
やりたいのはコレじゃない?
やりたいのはコレじゃない?
984デフォルトの名無しさん
2021/03/10(水) 06:16:01.51ID:S+G6vYN6985976
2021/03/11(木) 11:15:21.72ID:VAAe2gi6 みなさん、こんなアホに付き合ってもらってありがとうございます。
疲れてたのかな、俺。
まだ試してませんが、教えていただいたやり方でチャレンジしてみます。
疲れてたのかな、俺。
まだ試してませんが、教えていただいたやり方でチャレンジしてみます。
986532
2021/03/11(木) 11:39:56.33ID:AlcqB+X5 $pat = 'hoge(?:,.*)?$';
print "1\n" if 'hoge,dsad' =~ $pat;
print "2\n" if 'hoge' =~ $pat;
print "3\n" if 'hage' =~ $pat;
はどうよ
実行例
~ $ perl 64_976_hoge_pat.pl
1
2
print "1\n" if 'hoge,dsad' =~ $pat;
print "2\n" if 'hoge' =~ $pat;
print "3\n" if 'hage' =~ $pat;
はどうよ
実行例
~ $ perl 64_976_hoge_pat.pl
1
2
987デフォルトの名無しさん
2021/03/11(木) 14:27:02.78ID:IdZJgmDv もしかして
¥bhoge¥b
がよかったんじゃないの?
¥bhoge¥b
がよかったんじゃないの?
988デフォルトの名無しさん
2021/03/11(木) 14:37:57.64ID:l5V9NIZG splitをうまく使うと解決したかも
989デフォルトの名無しさん
2021/03/20(土) 13:47:35.09ID:UD6ZNZG9 梅
990デフォルトの名無しさん
2021/03/20(土) 13:51:21.40ID:UD6ZNZG9 Python勉強中
print('梅')
exit()
print('梅')
exit()
991デフォルトの名無しさん
2021/03/20(土) 17:31:10.22ID:ql2G31oz 【モダン推奨】Perlについての質問箱 50箱目
https://mevius.5ch.net/test/read.cgi/tech/1327110999/
https://mevius.5ch.net/test/read.cgi/tech/1327110999/
992デフォルトの名無しさん
2021/03/21(日) 17:34:20.99ID:2t2VtxHB 夢
993デフォルトの名無しさん
2021/03/21(日) 17:36:32.63ID:dkvLNxnd 爪
994デフォルトの名無しさん
2021/03/21(日) 17:39:12.82ID:2t2VtxHB うぜ
995デフォルトの名無しさん
2021/03/21(日) 21:54:16.28ID:6DoINzzO 2年で消化 人気スレじゃねーか
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 5:55:55.555
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- 戦争は無くならないし殺人は起きるし女はレイプされるし子供は餓死するし
- 日経時間外、5万円割れ 垂直落下始まる [402859164]
- 高市さんに土下座してもらったら一発解決なのに何でやらないんだろ??
- 【悲報】男性人気アイドルグループJO1、中国公演中止wwwwwwwwwwwwwwwwwwwwwwwwwww
