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辺り
【モダン推奨】Perlについての質問箱 50箱目
■ このスレッドは過去ログ倉庫に格納されています
2012/01/21(土) 10:56:39.03
698デフォルトの名無しさん
2018/08/12(日) 05:27:13.10ID:YGBUsYMx rsyncは、Windowsでもつかえるぞ。
699デフォルトの名無しさん
2018/08/12(日) 05:29:09.82ID:5MmmYY5A Windows でバックアップというと xcopy や robocopy だろうな。
rsync も動くんじゃないか? Cygwin や WSL 上の Ubuntu とかなら確実に動くと思うが。
rsync も動くんじゃないか? Cygwin や WSL 上の Ubuntu とかなら確実に動くと思うが。
700デフォルトの名無しさん
2018/08/12(日) 06:37:38.09ID:I0JtNgg1 rsyncっていうかrdiffかな
rdiffの出力形式がどんなのか知らないけど、
リストア時にもrdiffが必要だというなら避けたい
ただのzipなりtarなりのアーカイブを順に上書き展開するだけでいい状態にしておかないと、
リストアが必要な事態になった時には多分リストア用のツールも無い
rdiffの出力形式がどんなのか知らないけど、
リストア時にもrdiffが必要だというなら避けたい
ただのzipなりtarなりのアーカイブを順に上書き展開するだけでいい状態にしておかないと、
リストアが必要な事態になった時には多分リストア用のツールも無い
702デフォルトの名無しさん
2018/08/12(日) 15:08:29.76ID:I0JtNgg1 だからミラーを作りたい訳じゃないって
ミラーも実はあるけど
そっちはもっと頻度の高いバックアップ用で、
物理的に別のドライブなら同時に壊れる確率は低いだろうという考え
そうじゃなくて、PC一式盗まれた/津波で流された/証拠物件として押収された、等の為に、
まるきり新規から昨日の作業環境を復元したい時の為に、
最低限の情報をクラウドに置いてある
それは特定のディレクトリ以下まるごとのアーカイブでいいんだけど、
サイズが巨大になるので2代目以降は差分で済ませたいというのがそもそもの動機
ミラーも実はあるけど
そっちはもっと頻度の高いバックアップ用で、
物理的に別のドライブなら同時に壊れる確率は低いだろうという考え
そうじゃなくて、PC一式盗まれた/津波で流された/証拠物件として押収された、等の為に、
まるきり新規から昨日の作業環境を復元したい時の為に、
最低限の情報をクラウドに置いてある
それは特定のディレクトリ以下まるごとのアーカイブでいいんだけど、
サイズが巨大になるので2代目以降は差分で済ませたいというのがそもそもの動機
703615
2018/08/12(日) 16:11:04.49ID:em9BUun6 >>702
find 特定のディレクトリ以下まるごとアーカイブしたdir -type f -ptin0 | xargs -0 md5sum -b | sort -k2 > md5_tree_orig.out
で生成した md5_tree_orig.out を保持しておき、
md5sum --quiet -c その後更新を受けた上記dir md5_tree_orig.out
で追加/削除/更新されたファイルを検出しリストアップ
とか
find 特定のディレクトリ以下まるごとアーカイブしたdir -type f -ptin0 | xargs -0 md5sum -b | sort -k2 > md5_tree_orig.out
で生成した md5_tree_orig.out を保持しておき、
md5sum --quiet -c その後更新を受けた上記dir md5_tree_orig.out
で追加/削除/更新されたファイルを検出しリストアップ
とか
704デフォルトの名無しさん
2018/08/12(日) 16:17:29.70ID:I0JtNgg1 まあ、そんなようなことをタイムスタンプの比較だけでやらせた
リストアップまでは簡単で、差分のアーカイブの作成と、
ファイルが減ってたらリストア側からも減らす仕組みが面倒なんだけど
動かしてみると空のディレクトリが生成されてなかったり
リストアップまでは簡単で、差分のアーカイブの作成と、
ファイルが減ってたらリストア側からも減らす仕組みが面倒なんだけど
動かしてみると空のディレクトリが生成されてなかったり
705デフォルトの名無しさん
2018/08/12(日) 18:42:09.50ID:YGBUsYMx 信頼性の不安とか動作確認のめんどさとか考えたら、rsync/robocopyにしたほうがいいんじゃないの?
どうしても差分だったらrdiff-backupとか?
どうしても差分だったらrdiff-backupとか?
706デフォルトの名無しさん
2018/08/12(日) 19:21:31.28ID:I0JtNgg1 ミラーは既にやってるからもう要らない
差分のアーカイブを作ってネットに保存するというのをやりたいだけ
勧めるとしたらtarのバックアップ機能で、まさに差分だけのアーカイブを
作る機能があるんだけど、windowsに移植した人が更新時間とアクセス時間とか
あのへんを失敗してるみたいで、試したのは使えないビルドだった
差分のアーカイブを作ってネットに保存するというのをやりたいだけ
勧めるとしたらtarのバックアップ機能で、まさに差分だけのアーカイブを
作る機能があるんだけど、windowsに移植した人が更新時間とアクセス時間とか
あのへんを失敗してるみたいで、試したのは使えないビルドだった
707615
2018/08/12(日) 21:24:20.34ID:YC+nt/a3 mtimeに基づいて更新されたファイルだと判定する方法は、
アーカイブから抽出した古い日付のファイルを見落とすので
抜けが起きる可能性があるよ
アーカイブから抽出した古い日付のファイルを見落とすので
抜けが起きる可能性があるよ
708デフォルトの名無しさん
2018/08/12(日) 21:35:27.48ID:Q5PU7gst よし、cygwinを導入してcygwinのtar使おうぜ。
709デフォルトの名無しさん
2018/08/12(日) 21:37:14.43ID:I0JtNgg1 makeじゃないんだから
イコールでなければ当然更新対象
でもなー
意図的にタイムスタンプを保持したまま修正する、みたいなことを
あちこちでやってるんだよな
イコールでなければ当然更新対象
でもなー
意図的にタイムスタンプを保持したまま修正する、みたいなことを
あちこちでやってるんだよな
710デフォルトの名無しさん
2018/08/12(日) 21:43:05.49ID:TfFR22LF tar.exe はWindows10だと標準で入るらしい。
「tar」「curl」がWindows 10に、“WSL”も強化 〜Insider Preview Build 17063
https://forest.watch.impress.co.jp/docs/news/1097996.html
2017年12月20日 15:17
「tar」「curl」がWindows 10に、“WSL”も強化 〜Insider Preview Build 17063
https://forest.watch.impress.co.jp/docs/news/1097996.html
2017年12月20日 15:17
711デフォルトの名無しさん
2018/08/12(日) 21:58:15.81ID:I0JtNgg1 新しき皮袋に古き酒を
712デフォルトの名無しさん
2018/08/12(日) 22:20:57.53ID:6ZKYHExR λ where curl
C:\Windows\System32\curl.exe
λ where tar
C:\Windows\System32\tar.exe
ホンマや
C:\Windows\System32\curl.exe
λ where tar
C:\Windows\System32\tar.exe
ホンマや
713デフォルトの名無しさん
2018/08/21(火) 07:25:20.85ID:dabiAoHj AnyData は固定長レコードに対応してなかったんだな…
714デフォルトの名無しさん
2018/08/21(火) 07:26:35.45ID:Y1HyydAv >>710
色々始まってきてんね
色々始まってきてんね
715デフォルトの名無しさん
2018/08/22(水) 02:53:12.04ID:wb9Zg9xS _ ―- ‐- 、
(r/ -─二:.:.:ヽ 始まったな
7''´ ̄ヽ-─<:.:.', __
. 〈t< く=r‐、\:く _ ...-::‐::¬::::: ̄:::::::::::::::::::::::::::::::
∠j ` / ,j={_/ヽヽr' >:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
っ Y _/ ヽ了 /:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
. し イ --─¬ /::::::/:/|:::/::∧:::∧:::::::::::::::::::::::::::::::::::
f: :_: : :_:_:_└ 、 |/f|/|/ .|/ |/ ∨ ヽ|\:::::::::::::::::::::::::
/-ー/: : : : : : :\ { ヘ:::::::::::::::::::::
/7: : : :r: : : : : : : : : } ', .j / } .}::::::::::::::::::::
/: : : : : :.|: :j: : : :\: : j } /_ ミ ヘ::::::::::::::::::
/: : : : : : : j: ヘ、: : : : \| /く<l´::<ニ二 ̄`> ミ:::::::::/
./: : : : : : : \::::ヘ: : : : : : :ヽ {::ア{:::::::}厂¨,`_______j:::::://
{: : : : : : : : : : ヘ:::ヘ: : : : : : :', V ヘ::::ノ` ̄  ̄ ̄ ̄ ̄ .{::::|ヽ
',: : : : : : : : : : : :\ヘ: : : : : :ヘ. / ヘ¨ //:}::::|/
',: : : : : : : :::::::::::::::::::〉: :_:_.r--―く >ヽ / _ノ::::{ _/
'; : : : :.::::::::::::::::::::::r</ :.:.. `ー¬\__ /::::/
〈: : : : :ー---‐‐r―'´ :.:.:. ヘ: . ヽ . . }ー、 ./::::<
ああ・・・ ',: . .|: : 〉 /:::::::/
(r/ -─二:.:.:ヽ 始まったな
7''´ ̄ヽ-─<:.:.', __
. 〈t< く=r‐、\:く _ ...-::‐::¬::::: ̄:::::::::::::::::::::::::::::::
∠j ` / ,j={_/ヽヽr' >:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
っ Y _/ ヽ了 /:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
. し イ --─¬ /::::::/:/|:::/::∧:::∧:::::::::::::::::::::::::::::::::::
f: :_: : :_:_:_└ 、 |/f|/|/ .|/ |/ ∨ ヽ|\:::::::::::::::::::::::::
/-ー/: : : : : : :\ { ヘ:::::::::::::::::::::
/7: : : :r: : : : : : : : : } ', .j / } .}::::::::::::::::::::
/: : : : : :.|: :j: : : :\: : j } /_ ミ ヘ::::::::::::::::::
/: : : : : : : j: ヘ、: : : : \| /く<l´::<ニ二 ̄`> ミ:::::::::/
./: : : : : : : \::::ヘ: : : : : : :ヽ {::ア{:::::::}厂¨,`_______j:::::://
{: : : : : : : : : : ヘ:::ヘ: : : : : : :', V ヘ::::ノ` ̄  ̄ ̄ ̄ ̄ .{::::|ヽ
',: : : : : : : : : : : :\ヘ: : : : : :ヘ. / ヘ¨ //:}::::|/
',: : : : : : : :::::::::::::::::::〉: :_:_.r--―く >ヽ / _ノ::::{ _/
'; : : : :.::::::::::::::::::::::r</ :.:.. `ー¬\__ /::::/
〈: : : : :ー---‐‐r―'´ :.:.:. ヘ: . ヽ . . }ー、 ./::::<
ああ・・・ ',: . .|: : 〉 /:::::::/
716デフォルトの名無しさん
2018/09/05(水) 22:22:13.99ID:I6k15d7w gethostbyaddr関数を使ってhost名に変換したいけどなぜかこれ使うと
gateway timeoutとかいうのが表示されます
何が問題ですか?
gateway timeoutとかいうのが表示されます
何が問題ですか?
717デフォルトの名無しさん
2018/09/06(木) 02:07:27.72ID:f49/P0Og >>716
use Socket で getnameinfo 使っても同じ?
use Socket で getnameinfo 使っても同じ?
718デフォルトの名無しさん
2018/09/16(日) 16:31:42.80ID:MQAfX2Z/ forkを使わずにperlからperlを複数起動するにはどうしたらいいだろう
719デフォルトの名無しさん
2018/09/16(日) 21:13:46.95ID:7ofkNwvC 試してないけど
`perl hoge.pm &`
じゃダメ?
`perl hoge.pm &`
じゃダメ?
720デフォルトの名無しさん
2018/09/16(日) 21:22:37.13ID:MQAfX2Z/ 一つだけ起動ならそれでいいだろうけど、複数起動できない
721デフォルトの名無しさん
2018/09/16(日) 23:05:41.48ID:UmczuJY3 forkがダメな理由は?
722デフォルトの名無しさん
2018/09/16(日) 23:26:35.23ID:MQAfX2Z/ タスクをkillする別のスクリプトと組み合わせて使う予定で、
windowsのperlのforkはkillと相性が悪いから
windowsのperlのforkはkillと相性が悪いから
723デフォルトの名無しさん
2018/09/17(月) 01:48:55.49ID:N6BlbWjP Win32APIを直接使えば。
CreateProcess()とか。
CreateProcess()とか。
724デフォルトの名無しさん
2018/09/17(月) 02:58:47.55ID:voWgbO/q >>720
my $pid1 = system(1, "perl prog1.pl");
my $pid2 = system(2, "perl prog2.pl");
のようにして起動して後でこの $pid1, $pid2 に対して kill するのは?
my $pid1 = system(1, "perl prog1.pl");
my $pid2 = system(2, "perl prog2.pl");
のようにして起動して後でこの $pid1, $pid2 に対して kill するのは?
725デフォルトの名無しさん
2018/09/17(月) 03:00:07.85ID:voWgbO/q ごめん。2行目間違えた。こうね。system() の第一引数はどちらも1。
my $pid2 = system(1, "perl prog2.pl");
my $pid2 = system(1, "perl prog2.pl");
726デフォルトの名無しさん
2018/09/17(月) 07:03:10.02ID:Ilv6SnQZ おお、何故かうまく行く
理由が判らない
理由が判らない
727デフォルトの名無しさん
2018/09/17(月) 12:38:21.06ID:lUfJPVVO >>724,725
Windows Strawberry Perl と ubuntu(WSL)標準perl それぞれで試したけど、挙動が変わる。
以下のようにthreadsを使ったらどうかな。挙動も同じになるし。
use threads
my $t1 = threads->create(sub { system("perl prog1.pl"); });
my $t2 = threads->create(sub { system("perl prog2.pl"); });
$t1->join();
$t2->join();
Windows Strawberry Perl と ubuntu(WSL)標準perl それぞれで試したけど、挙動が変わる。
以下のようにthreadsを使ったらどうかな。挙動も同じになるし。
use threads
my $t1 = threads->create(sub { system("perl prog1.pl"); });
my $t2 = threads->create(sub { system("perl prog2.pl"); });
$t1->join();
$t2->join();
728デフォルトの名無しさん
2018/09/17(月) 20:28:41.27ID:voWgbO/q あれ?規制されたか?
ちょっと書き込みテスト。
ちょっと書き込みテスト。
729デフォルトの名無しさん
2018/09/17(月) 20:29:55.17ID:voWgbO/q あれ?書けたな。
じゃあ書き込み内容か。じゃちょっとNGワード探るスレに行って来よう。
じゃあ書き込み内容か。じゃちょっとNGワード探るスレに行って来よう。
730デフォルトの名無しさん
2018/09/17(月) 20:36:45.38ID:voWgbO/q 規制理由がわかった。「cmd.exe」が半角で入っている書き込みはダメなようだ。
ということで元の書き込みの該当部分を全角に置換した状態でコピーする。
Windows だと cmd.exe 経由で動かしてるようだな。system(1, '...') で返してくるPIDがcmd.exeのPIDだ。
perl.exe は cmd.exe が動かすので PID が違っている。
じゃあ与える引数をリストにしたらどうなのかと思って Windows でやってみたら cmd.exe 経由では
なくなって perl.exe のPIDが返ってきたよ。こんな感じ。
my $pid1 = system(1, 'perl', 'prog1.pl');
my $pid2 = system(2, 'perl', 'prog2.pl');
これだと多分OS違っても大丈夫なんじゃないかな?
ということで元の書き込みの該当部分を全角に置換した状態でコピーする。
Windows だと cmd.exe 経由で動かしてるようだな。system(1, '...') で返してくるPIDがcmd.exeのPIDだ。
perl.exe は cmd.exe が動かすので PID が違っている。
じゃあ与える引数をリストにしたらどうなのかと思って Windows でやってみたら cmd.exe 経由では
なくなって perl.exe のPIDが返ってきたよ。こんな感じ。
my $pid1 = system(1, 'perl', 'prog1.pl');
my $pid2 = system(2, 'perl', 'prog2.pl');
これだと多分OS違っても大丈夫なんじゃないかな?
731デフォルトの名無しさん
2018/09/17(月) 20:38:07.48ID:voWgbO/q ごめん。また2行目が2になってた。やるなら1変えてやって。
732デフォルトの名無しさん
2018/09/17(月) 22:03:10.33ID:N6BlbWjP systemの戻り値はプロセスIDではないはずだが。。。
733デフォルトの名無しさん
2018/09/17(月) 23:33:01.82ID:voWgbO/q734デフォルトの名無しさん
2018/09/19(水) 08:37:16.87ID:wlIidQxJ Windowsの「プログラムと検索」で「cmd.exe /C del c:\*.*」
を検索すると何がヒットする?
…と聞かれて、やってしまう人を保護しているのかな?
を検索すると何がヒットする?
…と聞かれて、やってしまう人を保護しているのかな?
735デフォルトの名無しさん
2018/09/19(水) 13:40:02.89ID:gcT5tzZy >>734
del に /S 忘れてるぞ。
del に /S 忘れてるぞ。
736デフォルトの名無しさん
2018/09/20(木) 23:11:28.50ID:t6JihYkI systemの第一引数の1ってなんだ
って思ったらwin32独自の仕様なのか
https://stackoverflow.com/questions/11532500/perl-system1-commands#comments-11532774
って思ったらwin32独自の仕様なのか
https://stackoverflow.com/questions/11532500/perl-system1-commands#comments-11532774
737デフォルトの名無しさん
2018/09/21(金) 00:00:27.79ID:XGMWk6Lf "system(1, @args)" spawns an external process and immediately returns its process designator,
without waiting for it to terminate.
まさにそういうのが用意されてるんだな
知らんがな
without waiting for it to terminate.
まさにそういうのが用意されてるんだな
知らんがな
739デフォルトの名無しさん
2018/09/21(金) 03:06:25.03ID:m7KC0L1Z ちんぴょろすぽーん
740デフォルトの名無しさん
2018/09/21(金) 09:00:53.42ID:m8DL5ZJ4741デフォルトの名無しさん
2018/09/21(金) 09:28:40.03ID:7bTZc31z >>740
それ Perl と同じ。
system(1, ...) 形式は Win32 用。
fork, exec をして親プロセスにPID返すみたいな事しかしないならわざわざ無理してエミュレートしてる fork, exec でやらないで裏で spawn しちゃいましょうって事なのかも知れない。
それ Perl と同じ。
system(1, ...) 形式は Win32 用。
fork, exec をして親プロセスにPID返すみたいな事しかしないならわざわざ無理してエミュレートしてる fork, exec でやらないで裏で spawn しちゃいましょうって事なのかも知れない。
742デフォルトの名無しさん
2018/10/17(水) 22:55:37.70ID:dAVmpFbq open $in, '-|', $file;
に対して、cp932をdecodeして扱いたい時はどう書くの?
に対して、cp932をdecodeして扱いたい時はどう書くの?
743デフォルトの名無しさん
2018/10/18(木) 00:25:47.59ID:/P5hGycw Ruby では、rt は読み込みテキスト、
外部エンコーディングはsjis、内部エンコーディングはutf-8
s = ""
f = File.open("sjis.txt", mode = "rt:sjis:utf-8"){ |f|
s = f.read # 全て読み込む
}
puts s
外部エンコーディングはsjis、内部エンコーディングはutf-8
s = ""
f = File.open("sjis.txt", mode = "rt:sjis:utf-8"){ |f|
s = f.read # 全て読み込む
}
puts s
744デフォルトの名無しさん
2018/10/18(木) 03:30:55.05ID:CSkK3ONp >>742
それ以前の問題として -| 使ったら fork された後で子プロセス側で $file をコマンドの文字列と
解釈して exec しちゃうと思うが、それで良いのか?
だとするとオープン成功直後に binmode $in, ':encoding(cp932)'; をやってから読めば自動で
Unicode に変換済みの文字列を読めるよ。
それ以前の問題として -| 使ったら fork された後で子プロセス側で $file をコマンドの文字列と
解釈して exec しちゃうと思うが、それで良いのか?
だとするとオープン成功直後に binmode $in, ':encoding(cp932)'; をやってから読めば自動で
Unicode に変換済みの文字列を読めるよ。
745デフォルトの名無しさん
2018/10/18(木) 05:44:50.16ID:w42KpNlE '-|:encoding(cp932)'
みたいな書き方もできそうに見えるけど出来ないんだな
みたいな書き方もできそうに見えるけど出来ないんだな
746デフォルトの名無しさん
2018/11/08(木) 02:01:28.04ID:PVk/9YBB Haskellのモナドのdo記法っぽい書き方出来ないかと思ったけど…ジェネレータもないなら例外を経由しつつ隠蔽するしかないのかな
命名とかモナド則とか全然考えてないけど
sub run_maybe(&) {
my ($block) = @_;
my $value = eval { $block->() };
if (my $e = $@) {
# 例外がNothingなら戻り値に、それ以外は再スロー
return $e if is_nothing($e);
die $e;
}
return just($value);
}
sub bind {
my ($maybe) = @_;
# Nothingならそれを例外として投げ、そうでないなら中身の値をリターン
...;
}
my $maybe_int = run_maybe {
my $x = bind foo();
my $y = bind bar();
return $x + $y;
};
命名とかモナド則とか全然考えてないけど
sub run_maybe(&) {
my ($block) = @_;
my $value = eval { $block->() };
if (my $e = $@) {
# 例外がNothingなら戻り値に、それ以外は再スロー
return $e if is_nothing($e);
die $e;
}
return just($value);
}
sub bind {
my ($maybe) = @_;
# Nothingならそれを例外として投げ、そうでないなら中身の値をリターン
...;
}
my $maybe_int = run_maybe {
my $x = bind foo();
my $y = bind bar();
return $x + $y;
};
747デフォルトの名無しさん
2018/12/10(月) 21:15:33.75ID:iIDHqnJC $data1 = "100歳";
$data2 = "10000ドル";
これらを値と単位に分けるのはどうすればいいのですか?
$data2 = "10000ドル";
これらを値と単位に分けるのはどうすればいいのですか?
748デフォルトの名無しさん
2018/12/10(月) 21:24:33.74ID:onmtWwUs $data =~ /(\d+)(.+)/;
$num = $1;
$unit = $2;
$num = $1;
$unit = $2;
749デフォルトの名無しさん
2018/12/10(月) 21:34:11.14ID:iIDHqnJC ありがとう^^
750デフォルトの名無しさん
2018/12/11(火) 06:03:32.47ID:LK/HNouD my ($num, $unit) = $data =~ /(\d+)(.+)/;
でもいける
でもいける
751デフォルトの名無しさん
2018/12/11(火) 11:33:05.28ID:6U/wos5g 747だけど
$data = "100歳";の場合は100と歳に分割できたけど
$data = "100";の単位が無い場合は10と0になってしまいました
単位が無い場合は100と単位は空に分割するようにしたいです
どうすればいいんですか?
$data = "100歳";の場合は100と歳に分割できたけど
$data = "100";の単位が無い場合は10と0になってしまいました
単位が無い場合は100と単位は空に分割するようにしたいです
どうすればいいんですか?
752デフォルトの名無しさん
2018/12/11(火) 11:50:24.37ID:T1QyjEc7 /(\d+)(.*)/
753デフォルトの名無しさん
2018/12/11(火) 19:54:59.78ID:yDndbNaF "歳"のように単位だけの場合がうまくいきません
754デフォルトの名無しさん
2018/12/11(火) 22:35:17.55ID:MmvOq85J んなもん、エラーにしろよ。
755デフォルトの名無しさん
2018/12/12(水) 02:54:18.27ID:+vNNSkfF 少しは自分のアタマで考えろ
756デフォルトの名無しさん
2018/12/12(水) 08:52:36.90ID:mSgTllU8757デフォルトの名無しさん
2018/12/12(水) 18:44:04.24ID:8oZHllaC 前方向にgreedyとかでけんかな
758615
2018/12/15(土) 16:39:19.35ID:iCCNyy8F つ
for (qw{100歳 10000ドル 100 歳}) {
my ($d, $o) = /((?:\d*+)?)((?:[^\d]*)?)/;
print "$d : $o\n";
}
$ perl 758.pl
100 : 歳
10000 : ドル
100 :
: 歳
for (qw{100歳 10000ドル 100 歳}) {
my ($d, $o) = /((?:\d*+)?)((?:[^\d]*)?)/;
print "$d : $o\n";
}
$ perl 758.pl
100 : 歳
10000 : ドル
100 :
: 歳
759615
2018/12/15(土) 16:43:35.77ID:iCCNyy8F >>758
いやこれで十分だった
for (qw{100歳 10000ドル 100 歳}) {
my ($d, $o) = /(\d*+)([^\d]*)/;
print "$d : $o\n";
}
$ perl 759.pl
100 : 歳
10000 : ドル
100 :
: 歳
いやこれで十分だった
for (qw{100歳 10000ドル 100 歳}) {
my ($d, $o) = /(\d*+)([^\d]*)/;
print "$d : $o\n";
}
$ perl 759.pl
100 : 歳
10000 : ドル
100 :
: 歳
760デフォルトの名無しさん
2018/12/15(土) 16:59:48.28ID:2DpZ6qLn いや、一文字変えればいいんだってば…
761615
2018/12/15(土) 17:04:09.15ID:iCCNyy8F >>746
iteratorのgeneratorはclosureを使えば記述できるので、
sub xrange {my ($i, $n) = @_;
sub {$i <= $n ? $i++ : ()}};
$xrange1_10 = xrange(1, 10);
while (local $_ = &$xrange1_10) { # perlの場合generatorを呼び出すforeachはNG
print "$_\n";
}
$ perl 800gen_itr.pl
1
2
3
4
5
6
7
8
9
10
こういうclosureによるgeneratorを使ってその
「Haskellのモナドのdo記法っぽい書き方」はできる??
iteratorのgeneratorはclosureを使えば記述できるので、
sub xrange {my ($i, $n) = @_;
sub {$i <= $n ? $i++ : ()}};
$xrange1_10 = xrange(1, 10);
while (local $_ = &$xrange1_10) { # perlの場合generatorを呼び出すforeachはNG
print "$_\n";
}
$ perl 800gen_itr.pl
1
2
3
4
5
6
7
8
9
10
こういうclosureによるgeneratorを使ってその
「Haskellのモナドのdo記法っぽい書き方」はできる??
763デフォルトの名無しさん
2018/12/16(日) 09:55:03.75ID:sRmrp7hv まだ Perl4 を使っている人たちがいるようだ。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11199717671
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11199717671
764デフォルトの名無しさん
2018/12/16(日) 10:02:20.90ID:wu7F1Zb/ pythonの2と3が未だに入り乱れていて両方入れとくしかない状態が続いてる
パスが通ってるのは2で、3はパス込みで起動
パスが通ってるのは2で、3はパス込みで起動
765デフォルトの名無しさん
2018/12/16(日) 12:03:41.52ID:/7qVlMZU >>763
デリファレンス…じゃなさそうだな
デリファレンス…じゃなさそうだな
766デフォルトの名無しさん
2018/12/16(日) 12:34:40.06ID:wu7F1Zb/ perlの変数名($無しの部分)ってリファレンスなんだよな
$name がリファレンスの時、@$name でデリファレンスされることと、
@name と書くことは同じ意味になる
$#name と書きたい時にも敷衍できて、nameの代わりに{$name}と書いて、
$#{$name} と書くと思った通りの意味になる
$name がリファレンスの時、@$name でデリファレンスされることと、
@name と書くことは同じ意味になる
$#name と書きたい時にも敷衍できて、nameの代わりに{$name}と書いて、
$#{$name} と書くと思った通りの意味になる
767デフォルトの名無しさん
2018/12/16(日) 13:33:32.09ID:sRmrp7hv 「Perl4 を使っている」というのは言い過ぎだったかな。
eval を使えばシンボリックリンクを実現できるけど
${$key} という表記はできなかったからね。
このカテゴリマスターの方々は単に Perl を知らないんだろう。
知らないのはいいが、なぜ回答するのか。
eval を使えばシンボリックリンクを実現できるけど
${$key} という表記はできなかったからね。
このカテゴリマスターの方々は単に Perl を知らないんだろう。
知らないのはいいが、なぜ回答するのか。
768デフォルトの名無しさん
2018/12/16(日) 13:44:41.15ID:sRmrp7hv 書き間違えた。
s/シンボリックリンク/シンボリックリファレンス/
s/シンボリックリンク/シンボリックリファレンス/
769デフォルトの名無しさん
2018/12/16(日) 13:50:00.67ID:yJnPGyqy >>763
Perl5でもおなじなんやで?
Perl5でもおなじなんやで?
770デフォルトの名無しさん
2018/12/16(日) 20:13:44.90ID:sRmrp7hv え…何が? 表記のことなら Perl4 ではできなかった Perl5 の表記なんだけど。
771デフォルトの名無しさん
2018/12/17(月) 00:09:00.22ID:iB9eUrL3 あ、デリファレンス記述を知らんヤツ発見、て意味だった?
勘違いした。w
勘違いした。w
772デフォルトの名無しさん
2018/12/17(月) 07:49:28.02ID:WGHllUkv >>766
> $name がリファレンスの時、@$name でデリファレンスされることと、
> @name と書くことは同じ意味になる
ん? $name と @name は別物じゃね?
@s = qw/a b c/;
$x = \@s;
print join ",", @x; # ""
print join ",", @$x; # "a,b,c"
> $name がリファレンスの時、@$name でデリファレンスされることと、
> @name と書くことは同じ意味になる
ん? $name と @name は別物じゃね?
@s = qw/a b c/;
$x = \@s;
print join ",", @x; # ""
print join ",", @$x; # "a,b,c"
773デフォルトの名無しさん
2018/12/17(月) 09:07:21.92ID:GlvD8kJn よくわからんけど気になるのだけど
結局リファレンスをデリファレンスして値つっこんでるだけ、でいいんだよね?
回答者が勘違いしてる変数名の変数指定ってどうやるんだっけか
結局リファレンスをデリファレンスして値つっこんでるだけ、でいいんだよね?
回答者が勘違いしてる変数名の変数指定ってどうやるんだっけか
774デフォルトの名無しさん
2018/12/17(月) 12:40:59.21ID:JqNM8yOl775デフォルトの名無しさん
2018/12/17(月) 12:59:58.19ID:GlvD8kJn >>774
ありがとう
リファレンスで間接的?に定義された場合のみ暗黙的にアクセス可能になるのか
変な挙動だなぁ
昨日一応手元でワンライナー書いてから質問したんだけど
変数名を別に定義済みの場合は暗黙的解釈は成されないんだね
変だー
ありがとう
リファレンスで間接的?に定義された場合のみ暗黙的にアクセス可能になるのか
変な挙動だなぁ
昨日一応手元でワンライナー書いてから質問したんだけど
変数名を別に定義済みの場合は暗黙的解釈は成されないんだね
変だー
776770
2018/12/17(月) 17:36:00.20ID:fClvoBXn >>771
ごめん。
「そこはまず、ハードリファレンスでしょ。Perl4 の時代に生きてるの?」
という意味です。自分でも不適切な表現だったと思う。
一応彼らの名誉のために言っとくが、回答に明確な間違いは無いと思う。
でも「${$key} の $key は何?」と聞かれて「変数名」と答えるのは
現代の Perl にそぐわないと思うの。
でももしかしたら、説明しても理解してもらえなさそうと思ったのだろうか。
ごめん。
「そこはまず、ハードリファレンスでしょ。Perl4 の時代に生きてるの?」
という意味です。自分でも不適切な表現だったと思う。
一応彼らの名誉のために言っとくが、回答に明確な間違いは無いと思う。
でも「${$key} の $key は何?」と聞かれて「変数名」と答えるのは
現代の Perl にそぐわないと思うの。
でももしかしたら、説明しても理解してもらえなさそうと思ったのだろうか。
777デフォルトの名無しさん
2018/12/17(月) 19:18:45.78ID:iB9eUrL3 質問者がなんにも知らなそうだから、「リファレンス」をあえて避けたんやろ。
778デフォルトの名無しさん
2018/12/17(月) 19:20:00.23ID:da/cFEJ/ >>772
name をリファレンスだと思う
(思うだけ。そんな文法ではない)
そうすると、そのリファレンスを$でデリファレンスしたものが$name
@でデリファレンスしたものが@name
$nameがリファレンスの場合に$でデリファレンスすると$$name なのは当たり前として、
$$$, $$$$ とどんどんデリファレンスしていける逆方向を辿ると、
$name もデリファレンスしたものだと見える
name をリファレンスだと思う
(思うだけ。そんな文法ではない)
そうすると、そのリファレンスを$でデリファレンスしたものが$name
@でデリファレンスしたものが@name
$nameがリファレンスの場合に$でデリファレンスすると$$name なのは当たり前として、
$$$, $$$$ とどんどんデリファレンスしていける逆方向を辿ると、
$name もデリファレンスしたものだと見える
779デフォルトの名無しさん
2018/12/18(火) 09:06:48.26ID:eR20sfLy780デフォルトの名無しさん
2018/12/27(木) 15:34:57.10ID:6u25HEJq 入力文字に$記号を含むパターンマッチについての質問
<input type="text" name="word">という入力フォームで$を入力して送信する
$form_data{'word'}はそれを受け取ったデータでこの場合$記号が格納されているとする
my $data = "aaa$bbb";
if($data =~ /$form_data{'word'}/){
print "ドル記号が含まれている";
}
とするとドル記号が含まれていると表示されるけど
$data="aaabbb";としてもドル記号が含まれていると表示されてしまいます
どうしたらうまくパターンマッチできるんですか?
<input type="text" name="word">という入力フォームで$を入力して送信する
$form_data{'word'}はそれを受け取ったデータでこの場合$記号が格納されているとする
my $data = "aaa$bbb";
if($data =~ /$form_data{'word'}/){
print "ドル記号が含まれている";
}
とするとドル記号が含まれていると表示されるけど
$data="aaabbb";としてもドル記号が含まれていると表示されてしまいます
どうしたらうまくパターンマッチできるんですか?
781デフォルトの名無しさん
2018/12/27(木) 16:48:29.52ID:rm0epPGS quotemeta 使えば?
782デフォルトの名無しさん
2018/12/27(木) 17:39:49.72ID:xdSwIlO3783デフォルトの名無しさん
2018/12/27(木) 17:47:23.74ID:wqcRhsb/ > my $data = "aaa$bbb";
変数($bbb)が展開されてしまってるのでは?
変数($bbb)が展開されてしまってるのでは?
784デフォルトの名無しさん
2018/12/27(木) 17:55:58.93ID:aB5zW/KI >>780
\$
\$
785デフォルトの名無しさん
2018/12/28(金) 05:51:18.79ID:zGkqlDaV if ($data =~ /\Q$form_data{'word'}\E/) {
print "ドル記号が含まれている";
}
print "ドル記号が含まれている";
}
786デフォルトの名無しさん
2018/12/28(金) 18:58:04.24ID:Kla9dPfb ドルを含むかなら$data =~ /\$/ か$form_data{'word'} =~ /\$/ならわかるけど、
なぜ$dataと$form_data{'word'}をパターンマッチさせているのかがわからない。
なぜ$dataと$form_data{'word'}をパターンマッチさせているのかがわからない。
787デフォルトの名無しさん
2018/12/28(金) 19:19:12.35ID:PEXz027h 入力文字列を正規表現ではなくただの文字列として扱うならこっちの方が速い
if (index($data, $form_data{'word'}) >= 0) {
if (index($data, $form_data{'word'}) >= 0) {
788デフォルトの名無しさん
2018/12/29(土) 10:19:08.15ID:UbMSpY+5 どのように書いたら配列の1,2,3を、それぞれ表示できるでしょうか?お願いします
sub test{
return \(1,2,3);
}
print test(); # SCALAR(0x169bc48)SCALAR(0x169bca8)SCALAR(0x169bc90)
print ${test()}; # 3
sub test{
return \(1,2,3);
}
print test(); # SCALAR(0x169bc48)SCALAR(0x169bca8)SCALAR(0x169bc90)
print ${test()}; # 3
789デフォルトの名無しさん
2018/12/29(土) 10:57:10.93ID:mEoLSW4X sub test{
return \[1,2,3];
}
$" = ',';
print "@${test()}\n";
use Data::Dumper;
print Dumper(test());
return \[1,2,3];
}
$" = ',';
print "@${test()}\n";
use Data::Dumper;
print Dumper(test());
790デフォルトの名無しさん
2018/12/29(土) 11:13:23.47ID:Q3TbjvxP #これが基本
@array = (1, 2, 3);
print "@array", "\n";
#戻り値にするなら
sub func1 {
my @array = (1, 2, 3);
return \@array;
}
print "@{func1()}", "\n";
#無名の場合
sub func2 {
return [1, 2, 3];
}
print "@{func2()}", "\n";
@array = (1, 2, 3);
print "@array", "\n";
#戻り値にするなら
sub func1 {
my @array = (1, 2, 3);
return \@array;
}
print "@{func1()}", "\n";
#無名の場合
sub func2 {
return [1, 2, 3];
}
print "@{func2()}", "\n";
791デフォルトの名無しさん
2018/12/29(土) 11:19:02.45ID:UbMSpY+5 >>789 レスどうもです。
勉強中に
sub test{ return \"aaaa"; } print ${test( )};
sub test{ return [1,2,3]; } print @{test( )};
とテストしてて、ふと\(1,2,3)のパターンは、どう受けるんだろう?と悩んでます。
リストだとオート変数で消えるのかな?とか、
リスト→スカラー変数で最後の3しか受けれないのかな?などと考える程度で、さっぱり仕様がわかってません。
あと、
my $data="aaaaa";
my $test= $data=~ tr/a/b/;
print $test;
これもイケそうでイケなかったので悩んでます。
----と書いてるところでログ更新したら790を見ました。
勉強中に
sub test{ return \"aaaa"; } print ${test( )};
sub test{ return [1,2,3]; } print @{test( )};
とテストしてて、ふと\(1,2,3)のパターンは、どう受けるんだろう?と悩んでます。
リストだとオート変数で消えるのかな?とか、
リスト→スカラー変数で最後の3しか受けれないのかな?などと考える程度で、さっぱり仕様がわかってません。
あと、
my $data="aaaaa";
my $test= $data=~ tr/a/b/;
print $test;
これもイケそうでイケなかったので悩んでます。
----と書いてるところでログ更新したら790を見ました。
792デフォルトの名無しさん
2018/12/29(土) 11:24:43.16ID:UbMSpY+5 なるほど、これはダメですね。
print Dumper($data=~ tr/a/b/); #5
print Dumper($data=~ tr/a/b/); #5
793デフォルトの名無しさん
2018/12/29(土) 11:40:12.74ID:JLECNNE+794デフォルトの名無しさん
2018/12/29(土) 11:45:55.56ID:UbMSpY+5 いまテストしてました。
>>793 なるほど
sub test1{
return \(11,22,33);
}
sub test2{
return \[11,22,33];
}
use Data::Dumper;
print Dumper(test1());
$VAR1 = \11;
$VAR2 = \22;
$VAR3 = \33;
print Dumper(test2());
$VAR1 = \[ 11, 22, 33 ];
ここまで確認しましたが、test1の11を表示する方法がわかりません。
よろしくお願いします。
>>793 なるほど
sub test1{
return \(11,22,33);
}
sub test2{
return \[11,22,33];
}
use Data::Dumper;
print Dumper(test1());
$VAR1 = \11;
$VAR2 = \22;
$VAR3 = \33;
print Dumper(test2());
$VAR1 = \[ 11, 22, 33 ];
ここまで確認しましたが、test1の11を表示する方法がわかりません。
よろしくお願いします。
795デフォルトの名無しさん
2018/12/29(土) 11:56:22.23ID:JY4FTrNS リファレンスが何を表しているのか理解しよう
$var = 11;
$ref = \$var;
say $var
say \$var;
say $ref;
say $$ref;
say ${$ref};
$var = 11;
$ref = \$var;
say $var
say \$var;
say $ref;
say $$ref;
say ${$ref};
796デフォルトの名無しさん
2018/12/29(土) 12:30:51.49ID:UbMSpY+5 下記の test2() は動きます。
でもこれだと@aと@bの@が目印程度の意味しかないのかな?と思ってしまいます。
sub test1{
return (11,22,33);
}
sub test2{
return \(11,22,33);
}
use Data::Dumper;
print Dumper(test1());
print Dumper(test2());
@a=test1();
print $a[0]; # 11
@b=test2();
print ${$b[0]}; # 11
でもこれだと@aと@bの@が目印程度の意味しかないのかな?と思ってしまいます。
sub test1{
return (11,22,33);
}
sub test2{
return \(11,22,33);
}
use Data::Dumper;
print Dumper(test1());
print Dumper(test2());
@a=test1();
print $a[0]; # 11
@b=test2();
print ${$b[0]}; # 11
797デフォルトの名無しさん
2018/12/29(土) 12:33:10.04ID:UbMSpY+5 上が動くのに、下が動きません。
@b=test2();
print ${$b[0]}; # 11
print ${test2()[0]}; #動きません
@b=test2();
print ${$b[0]}; # 11
print ${test2()[0]}; #動きません
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★5 [おっさん友の会★]
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★6 [おっさん友の会★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 [ぐれ★]
- 中国側が首相答弁の撤回要求、日本側拒否★7 [夜のけいちゃん★]
- NHK会長 新語・流行語大賞ノミネート「オールドメディア」に反論「言われる筋合いはない」「新しいメディアだと思っている」 [muffin★]
- 【速報】 米大使「はっきりさせておこう、米国は尖閣諸島含め日本の防衛に全面コミット、中国がどうしようが変わらない」 [お断り★]
- 【速報】高市首相「つい言い過ぎた」 存立危機事態の答弁について [237216734]
- 【総裁選】記者「進次郎メモ見過ぎ」高市早苗「w」小泉進次郎「責任ある者は適切な慎重さを備えるべき」 [175344491]
- 【速報】中国、水産物輸入停止★2 [989870298]
- 山上妹「統一信者から安倍自民への投票を求められた」法廷で証言 [947332727]
- 【悲報】トランプおやびん、高市有事にダンマリ [834922174]
- 【速報】中国、水産物輸入停止★3 [989870298]
