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
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]}; #動きません
798デフォルトの名無しさん
2018/12/29(土) 12:59:01.67ID:N37bA3c4 print ${(test2())[0]};
799デフォルトの名無しさん
2018/12/29(土) 13:09:45.93ID:UbMSpY+5 >>798
ありがとうございます。やっと書き方がわかりました
もう1つ質問がありますので書きます。
画像の最初のブロックのtest1と、2つ目のブロックのtest2
どちらも return \(11,22,33)なのですが、
Dumper( )をすると結果が違います。何故でしょうか?
ブロックスコープの扱いを間違えてるとか、根本的な間違えはあるでしょうか?
https://i.imgur.com/HpjnvGf.png
ありがとうございます。やっと書き方がわかりました
もう1つ質問がありますので書きます。
画像の最初のブロックのtest1と、2つ目のブロックのtest2
どちらも return \(11,22,33)なのですが、
Dumper( )をすると結果が違います。何故でしょうか?
ブロックスコープの扱いを間違えてるとか、根本的な間違えはあるでしょうか?
https://i.imgur.com/HpjnvGf.png
800デフォルトの名無しさん
2018/12/29(土) 13:27:10.67ID:mEoLSW4X >>794のDumperの結果見ればわかるけど
\(11,22,33);
は
(\11,\22,\33);
と書くのと同じで配列のリファレンスではなく中身をリファレンス化して作った配列
上でぼけてて\[1,2,3]なんて書いちゃったけど…[11,22,33]が配列のリファレンス
\(11,22,33);
は
(\11,\22,\33);
と書くのと同じで配列のリファレンスではなく中身をリファレンス化して作った配列
上でぼけてて\[1,2,3]なんて書いちゃったけど…[11,22,33]が配列のリファレンス
801デフォルトの名無しさん
2018/12/29(土) 13:38:48.59ID:UbMSpY+5 イメージはわかりました。先ほどのtest2( )を更に( )で囲んでからの[0]は気づきませんでしたが。
return ポインタのポインタ
↓
(ポインタ、ポインタ、ポインタ) → 実体11,22,33
return ポインタのポインタ
↓
(ポインタ、ポインタ、ポインタ) → 実体11,22,33
802デフォルトの名無しさん
2018/12/29(土) 13:47:25.71ID:JY4FTrNS 配列とリストが違う概念っていうのはわかりにくいよね
@array
(1, 2, 3)
@array
(1, 2, 3)
803デフォルトの名無しさん
2018/12/29(土) 14:17:08.53ID:Q3TbjvxP \( ... ) なんて書き方はどんな時に使うんだろう
804デフォルトの名無しさん
2018/12/29(土) 19:13:44.30ID:JLECNNE+ >>802
Perl5で配列とリストは同じ意味だろ。
Perl5で配列とリストは同じ意味だろ。
805デフォルトの名無しさん
2018/12/29(土) 19:19:17.64ID:JLECNNE+806デフォルトの名無しさん
2018/12/30(日) 08:38:58.47ID:d/kczs// >>804
($a, $b, $c) = (11, 22, 33);
scalar ($a, $b, $c) == 33; # リストの最後の要素
@array = ($a, $b, $c);
scalar @array == 3; # 配列の要素数
($a_ref, $b_ref, $c_ref) = \($a, $b, $c); # 各要素のリファレンスのリスト
$array_ref = \@array; # 配列変数のリファレンス
>>805
$$list[0] は ${ $list }[0] だから $list->[0] と同じ (リファレンスが指す配列の0番めの要素)
$a にアクセスしたいなら ${ $list[0] } (配列の0番めの要素をデリファレンス)
($a, $b, $c) = (11, 22, 33);
scalar ($a, $b, $c) == 33; # リストの最後の要素
@array = ($a, $b, $c);
scalar @array == 3; # 配列の要素数
($a_ref, $b_ref, $c_ref) = \($a, $b, $c); # 各要素のリファレンスのリスト
$array_ref = \@array; # 配列変数のリファレンス
>>805
$$list[0] は ${ $list }[0] だから $list->[0] と同じ (リファレンスが指す配列の0番めの要素)
$a にアクセスしたいなら ${ $list[0] } (配列の0番めの要素をデリファレンス)
807デフォルトの名無しさん
2018/12/30(日) 08:50:22.81ID:d/kczs// いい記事があった
「リストと配列(Array)はPerlでは別物」
ttps://togetter.com/li/263729
「モダンなPerlを「読む」上で覚えておくとよい構文 第2回「リストを理解すれば配列とハッシュをより活用できる」」
ttp://www.songmu.jp/riji/archives/2010/09/perl_2_1.html
「リストと配列(Array)はPerlでは別物」
ttps://togetter.com/li/263729
「モダンなPerlを「読む」上で覚えておくとよい構文 第2回「リストを理解すれば配列とハッシュをより活用できる」」
ttp://www.songmu.jp/riji/archives/2010/09/perl_2_1.html
808デフォルトの名無しさん
2018/12/30(日) 08:53:03.67ID:x1KM9vdn 列挙してまとめてリファレンスなんか取ることあるか?
数が多いなら普通はループにすることを考える
3つくらいなら普通に書けばいい
何かの関数の引数にリファレンスでいっぱい渡すくらいしか思いつかないけど、
そんなインターフェースがそもそも間違ってるし可読性も下がる
そんな書き方は無いものと思って使わないのが吉
数が多いなら普通はループにすることを考える
3つくらいなら普通に書けばいい
何かの関数の引数にリファレンスでいっぱい渡すくらいしか思いつかないけど、
そんなインターフェースがそもそも間違ってるし可読性も下がる
そんな書き方は無いものと思って使わないのが吉
809デフォルトの名無しさん
2018/12/30(日) 08:53:43.65ID:/wKH6dhf リスト・・・複数の値
配列・・・複数の値が入ってるオブジェクト
ようするにこんだけだろ?
配列・・・複数の値が入ってるオブジェクト
ようするにこんだけだろ?
810デフォルトの名無しさん
2018/12/30(日) 08:56:13.19ID:/wKH6dhf Perlにとってオブジェクト指向は
頑張ってオブジェクトに見えるものを作り出すもので
オプショナルな存在だから
リストと配列の違いをシンプルに説明できないんだろうな
頑張ってオブジェクトに見えるものを作り出すもので
オプショナルな存在だから
リストと配列の違いをシンプルに説明できないんだろうな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否★3 [夜のけいちゃん★]
- 債券・円・株「トリプル安」に…長期金利1.755%まで上昇、円は対ユーロで史上最安値 ★2 [蚤の市★]
- 被爆者は「怒りが腹の底から湧いてくる」高市首相“非核三原則見直し報道”に被爆地で懸念や憤りの声《長崎》 [1ゲットロボ★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★6 [ぐれ★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★7 [BFU★]
- おこめ券 予算約9.5億円のうち約2.4億円が経費(そのうちJAに約1億円支払い) 東京・台東区 [Hitzeschleier★]
