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
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にとってオブジェクト指向は
頑張ってオブジェクトに見えるものを作り出すもので
オプショナルな存在だから
リストと配列の違いをシンプルに説明できないんだろうな
頑張ってオブジェクトに見えるものを作り出すもので
オプショナルな存在だから
リストと配列の違いをシンプルに説明できないんだろうな
811デフォルトの名無しさん
2018/12/30(日) 09:00:51.60ID:x1KM9vdn オブジェクト指向だと言うにはカプセル化は必須で、
メンバ変数をダイレクトにいじるとかやっちゃ駄目な筈なんだけど、
その方が便利だから普通にやってる
$obj->setval($val);
$obj->{val} = $val;
一緒やん
メンバ変数をダイレクトにいじるとかやっちゃ駄目な筈なんだけど、
その方が便利だから普通にやってる
$obj->setval($val);
$obj->{val} = $val;
一緒やん
812デフォルトの名無しさん
2018/12/30(日) 09:06:23.51ID:/wKH6dhf > オブジェクト指向だと言うにはカプセル化は必須で、
必須じゃないよ。てか必須なものなんて無い
オブジェクト指向言語というのは
オブジェクト指向を行うために用意された文法がある。
条件はこれだけ
必須じゃないよ。てか必須なものなんて無い
オブジェクト指向言語というのは
オブジェクト指向を行うために用意された文法がある。
条件はこれだけ
813デフォルトの名無しさん
2018/12/30(日) 10:57:52.01ID:d/kczs// アンダースコアから始まるメンバ変数はプライベートなので外側から触ってはいけません
よしカプセル化できたな!!!
よしカプセル化できたな!!!
814デフォルトの名無しさん
2018/12/30(日) 11:50:53.97ID:iF2NHAVN >>813
カプセル化か? ・・・ YES 命名規則によるカプセル化
カプセル化か? ・・・ YES 命名規則によるカプセル化
815615
2018/12/31(月) 00:31:18.84ID:Hr+PmI8P Perlのオブジェクト指向??は記述がちょっと変体言語風な見た目だけれど
Cのstructを拡張したような型クラス+継承に基づく言語よりも
propertyベースOOP+mixinのような柔軟な表現が出来て
良いんじないかと俺は思う
Cのstructを拡張したような型クラス+継承に基づく言語よりも
propertyベースOOP+mixinのような柔軟な表現が出来て
良いんじないかと俺は思う
816デフォルトの名無しさん
2018/12/31(月) 00:44:01.46ID:LUt0Quvy gotoは柔軟だから優れていると言っているようなもので、
何でも出来る = 優れている ・・・ これは間違いなんだよ
アセンブラという何でも出来る言語から進化し、
特定の用途の「パターン」を見つけて抜き出し、
そのパターンを専用の文法にしてきた。
特定の用途専用(=柔軟性がない)の文法があることで
書き方が統一できるし、何がしたいのかという意図を
他人に伝えることが出来る
何でも出来る = 優れている ・・・ これは間違いなんだよ
アセンブラという何でも出来る言語から進化し、
特定の用途の「パターン」を見つけて抜き出し、
そのパターンを専用の文法にしてきた。
特定の用途専用(=柔軟性がない)の文法があることで
書き方が統一できるし、何がしたいのかという意図を
他人に伝えることが出来る
817615
2018/12/31(月) 01:09:11.59ID:Hr+PmI8P 制限の方向性が弊害を持っているのに
広く普及しちゃうと悲惨なことになる
広く普及しちゃうと悲惨なことになる
818デフォルトの名無しさん
2018/12/31(月) 01:10:55.58ID:LUt0Quvy それでPerlのオブジェクト指向、mooseとかどうなりましたか?
820615
2018/12/31(月) 01:13:48.73ID:Hr+PmI8P JavaもCOBOLみたいな立ち位置になるだろうし
821デフォルトの名無しさん
2018/12/31(月) 01:16:04.10ID:LUt0Quvy >>819
そうなるやろ?
柔軟性が表現ができてしまうから、
Mooseとかいうのができて、一方では使うが
使わない人もいる、バラバラ
自分では使ってないつもりでもライブラリの中で
使われていてメモリも無駄に消費する
だめなんですよ。柔軟だけど機能が足りないというのは。
そうなるやろ?
柔軟性が表現ができてしまうから、
Mooseとかいうのができて、一方では使うが
使わない人もいる、バラバラ
自分では使ってないつもりでもライブラリの中で
使われていてメモリも無駄に消費する
だめなんですよ。柔軟だけど機能が足りないというのは。
822デフォルトの名無しさん
2018/12/31(月) 08:07:22.77ID:C6w6M91j TMTOWTDI は正義。
823615
2018/12/31(月) 10:01:45.42ID:2dwmQiqr Mooseは他の言語のようなOOPをPerlに持ち込んでどっちつかずの立ち位置になってしまった。
Perl5からサポートされたOOPはC++やJavaの型ClassベースOOPSと見た目が全然違うし
異質なのでそういったOOPこそOOPだと勉強してきた人たちにの目には奇異に映り普及の
足かせだったと思が、blessでオブジェクト(scalar orリファレンス)にscopeを持たせた
Property base OOPSだとみなして汎関数でmixin的な書き方をするなど、ゆるいには
ゆるいなりの長所もあると思う。これはPythonのOOPSのゆるさとも通じるところがあると思う。
性能に関してはC++のような最下層でも効率的なものではないし、Property baseという
特徴から見ても、中間レイヤ・グレインで使うのに適した仕組みだと考えていますが
Perl5からサポートされたOOPはC++やJavaの型ClassベースOOPSと見た目が全然違うし
異質なのでそういったOOPこそOOPだと勉強してきた人たちにの目には奇異に映り普及の
足かせだったと思が、blessでオブジェクト(scalar orリファレンス)にscopeを持たせた
Property base OOPSだとみなして汎関数でmixin的な書き方をするなど、ゆるいには
ゆるいなりの長所もあると思う。これはPythonのOOPSのゆるさとも通じるところがあると思う。
性能に関してはC++のような最下層でも効率的なものではないし、Property baseという
特徴から見ても、中間レイヤ・グレインで使うのに適した仕組みだと考えていますが
824デフォルトの名無しさん
2018/12/31(月) 10:15:50.03ID:0rbvsgzk オブジェクト指向は結果オブジェクト指向なだけでやりたいことはオブジェクト指向じゃない
同じこと何度も書きたくないからライブラリ化したいだけで、
一旦ライブラリにしたら極力中身のことを忘れていいようにしたいだけ
どこまで忘れていいかは実装のセンスに依るので、言語仕様は関係ない
同じこと何度も書きたくないからライブラリ化したいだけで、
一旦ライブラリにしたら極力中身のことを忘れていいようにしたいだけ
どこまで忘れていいかは実装のセンスに依るので、言語仕様は関係ない
825デフォルトの名無しさん
2018/12/31(月) 10:44:08.74ID:LUt0Quvy > Mooseは他の言語のようなOOPをPerlに持ち込んでどっちつかずの立ち位置になってしまった。
PerlにOOPの機能が不足してるからそうなるわけだよ
PerlにOOPの機能が不足してるからそうなるわけだよ
826デフォルトの名無しさん
2018/12/31(月) 10:45:08.33ID:LUt0Quvy827デフォルトの名無しさん
2018/12/31(月) 12:37:43.61ID:C6w6M91j >>826
己れの方こそ嘘つきだな
「証明もされてないことを言った」つまり真実か嘘か判定不能な段階なのに「嘘つき」のレッテル貼りとか
TMTOWTDI はPerlの基本方針でありPerlをPerlたらしめている特徴であり
しばしばPerlを好み愛用し続ける者にとってはその大きい理由でもある
ゆえに「TMTOWTDI は正義」である
己れの方こそ嘘つきだな
「証明もされてないことを言った」つまり真実か嘘か判定不能な段階なのに「嘘つき」のレッテル貼りとか
TMTOWTDI はPerlの基本方針でありPerlをPerlたらしめている特徴であり
しばしばPerlを好み愛用し続ける者にとってはその大きい理由でもある
ゆえに「TMTOWTDI は正義」である
828デフォルトの名無しさん
2018/12/31(月) 14:40:49.82ID:/9F0EQIO >>825
具体的に、不足してる機能は?
具体的に、不足してる機能は?
829デフォルトの名無しさん
2018/12/31(月) 17:58:26.87ID:LUt0Quvy >>828
オブジェクト指向を行うための標準的な方法
オブジェクト指向を行うための標準的な方法
830615
2018/12/31(月) 21:31:35.63ID:4xTPjQJE 型クラス+継承を使ったオブジェクト指向は
モジュラリティーや依存の観点からソフトウェア工学的に害が見られるので
オレはなるべく使わないようにしている
モジュラリティーや依存の観点からソフトウェア工学的に害が見られるので
オレはなるべく使わないようにしている
831デフォルトの名無しさん
2018/12/31(月) 22:05:38.48ID:0rbvsgzk クラス設計して継承して、みたいなのは人間の能力を越えてる
継承も抽象度を高めたいとかそんな大層な目的じゃなくて、
やっぱり同じこと何度も書きたくないからやってるだけで、
よっぽど汎用性の高い概念なら継承でうまくいくかもしれんけど、
そんなんは最初から内蔵されてるのが普通
継承も抽象度を高めたいとかそんな大層な目的じゃなくて、
やっぱり同じこと何度も書きたくないからやってるだけで、
よっぽど汎用性の高い概念なら継承でうまくいくかもしれんけど、
そんなんは最初から内蔵されてるのが普通
832デフォルトの名無しさん
2018/12/31(月) 22:42:10.76ID:LUt0Quvy833デフォルトの名無しさん
2018/12/31(月) 22:42:33.80ID:LUt0Quvy × クラス設計して継承して、みたいなのは人間の能力を越えてる
○ クラス設計して継承して、みたいなのは>>831の能力を越えてる
○ クラス設計して継承して、みたいなのは>>831の能力を越えてる
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【大分】佐賀関で大規模火災、170棟以上が延焼中 70代男性1人と連絡取れず [ぐれ★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 寝癖ってどうしたらつかなくなるんや?
- 自閉症が「んなっしょい」と連呼するお🏡
- 【画像】エロい一般漫画はなぜこんなに抜けるのか
- BTSのバラエティ面白すぎワロタ
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
