Perlについての質問箱 63箱目

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん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/

2デフォルトの名無しさん2014/02/19(水) 23:37:34.89
【本】
初めてのPerl 第6版(リャマ)[2012年07月 発行]
http://www.oreilly.co.jp/books/9784873115672/

続・初めてのPerl 改訂第2版 [2013年08月 発行]
http://www.oreilly.co.jp/books/9784873116280/

マスタリングPerl [2009年03月 発行]
http://www.oreilly.co.jp/books/9784873113975/

もっと自在にサーバを使い倒す 業務に役立つPerl [2012年4月11日発売]
http://gihyo.jp/book/2012/978-4-7741-5025-3

モダンPerl入門 [2009/2/10]
http://www.amazon.co.jp/exec/obidos/ASIN/4798119172/secodezine-22/
モダンPerl入門 増補改訂版(仮)[2014年1月予定]
http://codezine.jp/book/modernperl2

Perl CPANモジュールガイド [2011/4/8]
http://www.amazon.co.jp/dp/486267108X

【オンラインマニュアル】
最新のドキュメント: http://search.cpan.org/dist/perl/
perldoc.jp: http://perldoc.jp/
perldoc.perl.org: http://perldoc.perl.org/

3デフォルトの名無しさん2014/02/19(水) 23:38:16.54
[少し古めの良書]

プログラミングPerl 第3版 VOLUME 1,2(駱駝)[2002年09月 発行]
http://www.oreilly.co.jp/books/4873110963/
http://www.oreilly.co.jp/books/4873110971/

Perlクックブック 第2版 VOLUME 1,2 [2004年09月 発行]
http://www.oreilly.co.jp/books/4873112028/

Perl ベストプラクティス [2006年08月 発行]
http://www.oreilly.co.jp/books/4873113008/

Perl Hacks [2007年01月 発行]
http://www.oreilly.co.jp/books/9784873113142/

実用 Perlプログラミング 第2版 [2006年03月 発行]
http://www.oreilly.co.jp/books/487311280X/

4デフォルトの名無しさん2014/02/19(水) 23:38:56.41
【日本語、Unicode関連】

Encodeモジュール
http://search.cpan.org/dist/Encode/

第31回 encoding:いつまでもjperlから抜け出せない方に
http://gihyo.jp/dev/serial/01/modern-perl/0031

第32回 Encode:日本語だけ扱えればよいのではなく
http://gihyo.jp/dev/serial/01/modern-perl/0032

perlunifaq - Perl Unicode FAQ
http://perldoc.jp/docs/perl/5.18.1/perlunifaq.pod

perlunicode - Perl における Unicode サポート
http://perldoc.jp/docs/perl/5.12.1/perlunicode.pod

http://www.rwds.net/kuroita/program/Perl_unicode.html

【モジュール】
CPAN.com: http://search.cpan.org/

【Perl環境構築】
plenv
https://github.com/tokuhirom/plenv

cpanm
http://search.cpan.org/~miyagawa/App-cpanminus-1.7001/lib/App/cpanminus.pm
http://perldoc.jp/docs/modules/App-cpanminus-1.7001/lib/App/cpanminus/fatscript.pod

5デフォルトの名無しさん2014/02/19(水) 23:39:35.34
# [Perl 日本語処理の基礎の基礎]
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。

6デフォルトの名無しさん2014/02/19(水) 23:46:41.13
糞スレいくつも立ててんじゃねーよ
いい加減にしろ

http://toro.2ch.net/test/read.cgi/tech/1392639772/

7デフォルトの名無しさん2014/02/19(水) 23:48:52.70
■推移
ttp://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

2013.Dec 1.072%
2014.Jan 0.917%
2014.Feb 0.887%


■推移グラフ
ttp://www.tiobe.com/index.php/content/paperinfo/tpci/Perl.html


■Perlの今後
他言語に対する優位性がほとんどないため、消滅に向かって進んでいる。
近い将来消えるのは確実。

8デフォルトの名無しさん2014/02/20(木) 01:15:48.35
TIOBEって日本じゃほとんど聞いたことがないよね?Perlは日本語をちゃんと処理
できる数少ない処理系だから、海外とは状況が違うと思うんだよね

9デフォルトの名無しさん2014/02/20(木) 01:40:45.62
自分がほとんど聞いたことがないという無知っぷりを晒しつつ
その前提で語る基地害がPerl厨

10デフォルトの名無しさん2014/02/20(木) 02:48:27.42
乱立してる統計サイトの内の一つで、たいしたサイトじゃない。

http://langpop.com/
こんなサイトもあって、今話題に登ってる言語の項目とか見たら
PHPもPerlも似たりよったり。

こんなもんに一喜一憂するのはアホのする事。
#別に「Perlが落ち目じゃない」と主張するつもりも、毛頭無い。

11デフォルトの名無しさん2014/02/20(木) 03:30:30.50
乱立といえばム板にスレッド乱立させてるPerl厨みたいだな
いい加減迷惑なんだよゴキブリ共
消滅寸前のゴミ言語にこんなにスレッドは必要ない

Perlについて
http://toro.2ch.net/test/read.cgi/tech/1217851121/

【モダン推奨】Perlについての質問箱 50箱目
http://toro.2ch.net/test/read.cgi/tech/1327110999/

Perl初心者スレ(マジレス回答)
http://toro.2ch.net/test/read.cgi/tech/1349538519/

Perlについての罵倒スレ 63箱目
http://toro.2ch.net/test/read.cgi/tech/1392639772/

Perlについての質問箱 63箱目
http://toro.2ch.net/test/read.cgi/tech/1392820583/

12デフォルトの名無しさん2014/02/20(木) 07:42:53.27
WebProgの方で、その活動すれば?
そのスレの内三つは荒しが立てたスレだし、Perlと名前が入るスレ自体も10個しかないけど
向うには両手に余るくらいのスレは乱立してるぞ。

13デフォルトの名無しさん2014/02/20(木) 11:23:00.57
久々の正式なスレ立て乙

個人的には「ミニマルPerl」が俺の目を覚ましてくれた本だなあ
まあ、解ってる人には間違いなく退屈な本だけれども

14デフォルトの名無しさん2014/02/20(木) 16:17:33.48
スレ乱立のうちの1つだから全く乙じゃない
ただの迷惑行為

15デフォルトの名無しさん2014/02/21(金) 00:39:44.03
重複によりこのスレには削除依頼が出されました
↓のスレに移動してください

【誘導】
Perlについての質問箱 63箱目
http://toro.2ch.net/test/read.cgi/tech/1392906213/

16デフォルトの名無しさん2014/02/21(金) 00:46:22.39
【プログラミング自体の経験が無い奴はまずココを読め]】
Perl プログラミング講座: ttp://nyx.pu1.net/

【本】
リャマ: ttp://www.oreilly.co.jp/books/4873112575/
駱駝: ttp://www.oreilly.co.jp/books/4873112869/
Effective Perl: ttp://www.c-r.com/book/detail/888
クックブック: ttp://gihyo.jp/book/2012/978-4-7741-4972-1
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/9784873113425/
Perl Hacks: ttp://www.oreilly.co.jp/books/4873112915/

【オンラインマニュアル】
最新のドキュメント: ttp://blog.livedoor.jp/kumagai_nori/archives/52255109.html
perldoc.jp: ttp://bg.pi-ppi.com/
perldoc.perl.org: ttp://manual.xwd.jp/

17デフォルトの名無しさん2014/02/21(金) 15:41:53.76
例のPHP厨毒の精神異常者がスレを乱立させてから動きがパッタリやんだが、規制食らったのか?
それとも夜に活動が再開されるのか?

18デフォルトの名無しさん2014/02/21(金) 15:48:29.84
乱立させてたのってPHPユーザーなの?

てっきりPerl厨だと思ってたんだけど。
スレ乱立とか頭の悪いことをするのはPerlを選ぶような知能の低いPerl厨くらいしかいないだろ。

19デフォルトの名無しさん2014/02/21(金) 16:10:45.03
php厨()とか妄想をベースに考えるから、事実と整合性が取れなくなって>>17みたいな書き込みをするようになる
というかその不整合からくる違和感に耐えられなくなって書き込んでるって言ったほうが正解か
>>17は自覚がないみたいだけど糖質の疑いがある

20デフォルトの名無しさん2014/02/21(金) 17:14:07.34
自演乙

21デフォルトの名無しさん2014/02/21(金) 17:39:17.06
>>17
糖質も発見が早ければ投薬で治療できるから病院行ってみたら?

22デフォルトの名無しさん2014/02/21(金) 18:43:53.70
自己紹介乙

23デフォルトの名無しさん2014/02/21(金) 19:36:32.84
>>17ってまさか本当に自覚ないのかな。

24デフォルトの名無しさん2014/02/21(金) 19:39:12.82

25デフォルトの名無しさん2014/02/21(金) 22:00:12.92
自覚があれば病院行くだろうし
糖質と診断されればネットは控えろと言われるだろうから
こんなところにはいない

26デフォルトの名無しさん2014/02/21(金) 22:18:44.98
罵倒スレのほうが内容にマッチしてるじゃん、何でわざわざ質問箱で立て直したの?

27デフォルトの名無しさん2014/02/22(土) 02:27:43.89
Perl厨にとってはこれが質疑応答なんだよ

28デフォルトの名無しさん2014/02/23(日) 08:57:46.27
朝勃ちんこ

29デフォルトの名無しさん2014/02/24(月) 19:35:06.10
Perl=ちんこ言語

男のちんこをしゃぶれない弱輩には使いこなせない言語

30デフォルトの名無しさん2014/08/22(金) 18:02:07.86ID:+einZQJ5

31デフォルトの名無しさん2014/08/23(土) 00:49:39.55ID:j4ngjv2t
ぐろ

32デフォルトの名無しさん2014/09/05(金) 22:30:13.20ID:S+Rzc4u+
>>30
グロ

33デフォルトの名無しさん2014/09/05(金) 23:11:47.51ID:p4jkMY4H
亀頭?

34デフォルトの名無しさん2014/12/11(木) 16:19:01.34ID:OlwBDLMK
perl 5(v5.16.3)で
http://d.hatena.ne.jp/syohex/20110616/1308237655
を走らせると
BEGIN not safe after errors--compilation aborted at ~/op.pl line 16.
と止まってしまいます。
解決策を教えてください。

35デフォルトの名無しさん2014/12/11(木) 17:08:56.68ID:aWaBOmKM
>>34
OSは何?

36デフォルトの名無しさん2014/12/13(土) 11:26:51.16ID:sck7BTkh
MacOSX1068です

37名無しさん@そうだ選挙に行こう2014/12/13(土) 13:22:37.60ID:toJAZvUP
>>36
mac持ってないから試せないけど、一応これで動くんじゃないかと。
adhocな対応でセキュリティ考えてないから注意してね。

open my $fh, '<', \(my $dmy = `@cmd`) or die "Can't exec @cmd";

38名無しさん@そうだ選挙に行こう2014/12/13(土) 13:39:32.35ID:SQgyoVwB
えーん

39デフォルトの名無しさん2015/01/03(土) 02:38:43.41ID:fziQOJOK
hage

40デフォルトの名無しさん2015/06/08(月) 23:02:16.28ID:fDJEyEgd
正規表現で

aaa 99 PPP
iii 87 XYZ
uuu 32 XXX

の PPP以降 と XYZ以降 と XXX以降 を取り出すのはどうすれば良いでしょうか?
aaa iii uuu が半角の文字 99 87 32 が 数字である事は保証されていますが
PPP XYZ XXX に至るまで半角スペース、もしくは全角スペースがいくつあるかは保証されておらず
substr 等で切りだす事はできません。わかる方宜しくお願いします。

41デフォルトの名無しさん2015/06/09(火) 00:25:53.38ID:lkN1yBxE
文章が不透明だから分からなくなる。(誰にも分からない)。
正規表現は完璧に仕様を出さないと書けない。出せば単にそれを書くだけ。


行頭は半角文字列である → ^[a-z]
その後に半角スペースがある → \ (←見えないが半角スペース)
その後に2桁の数値がある。 → [0-9]{2}
その後に一文字以上の半角スペースと全角スペースが不定数混在する → ([\ \ ])+
その後に大文字が3つある → [A-Z]{3}
以降、行末まで。(取り出し対象文字列) → .*$

まぁ辞書やないんやけどな。ここは。

42デフォルトの名無しさん2015/06/09(火) 00:26:47.75ID:lkN1yBxE
あ、行頭は3文字か
^([a-z]{3})

43デフォルトの名無しさん2015/09/30(水) 22:23:35.50ID:sTs+YTNn
URLに?記号が2つある場合のデータの取得について
たとえばhttp://○○○.com/pagejump.cgi?http://△△△.com/disp.cgi?mode=testのよう?が2つある場合
$ENV{'QUERY_STRING'}だとhttp://△△△.com/disp.cgiまでしか取得できなくて?mode=testの部分が取得できないんですけど
フルに取得できるにはどうしたらいいんですか?

44デフォルトの名無しさん2015/10/01(木) 08:31:04.47ID:jKkjZr1B
フル?
http://○○○.com/pagejump.cgi?http://△△△.com/disp.cgi?mode=test 」の場合、
query文字列は、「http://△△△.com/disp.cgi?mode=test」 だから、それが取れれば
十分なのでは?

その中の一部を取り出したいなら自分で好きに取り出せばいい

45442015/10/01(木) 13:19:49.64ID:NghmrQed
スマヌ質問内容理解してなかった
だがPerl関係なくね?

46デフォルトの名無しさん2015/10/02(金) 00:15:42.88ID:jBpUUsqc
>>43
本当にクライアントが
http://○○○.com/pagejump.cgi?http://△△△.com/disp.cgi?mode=test
を送ったのなら、それが原因だと思う。
URL の各部分は適切にエスケープされなければならない。
Perl でやるならこうだ。

use URI;
use URI::Escape;

$u = URI->new("http://○○○.com/pagejump.cgi");
$u->query( uri_escape("http://△△△.com/disp.cgi?mode=test"));

# クライアントに適切なエスケープを期待出来ないなら……まあ、がんばってくれ。

47デフォルトの名無しさん2015/10/02(金) 03:53:10.85ID:j2xAjxnc
>>40-42
これで一致した、次の文字から、行末までを取得する
^([a-z]{3})([\ \ ])+[0-9]{2}([\ \ ])+


半角・全角スペースは、「aaa○99○PPP」
○の所にしか入らないのだな?
つまり、各トークンの中には、入らないのだな?

それなら、全行のすべての全角スペースを、
半角スペースに置換して、その後、
連続した半角スペースを、1つの半角スペースに置換する

そして、8文字目から行末までを、取得する

>>44-46
URLの各部分では、特別に扱う文字が決まっているから、
クエリ文字列部分で、「? =」・日本語などは使えないので、
エスケープする

48デフォルトの名無しさん2015/10/03(土) 06:04:18.38ID:AAE95wIv
4ヶ月前にレスに回答(笑)

49デフォルトの名無しさん2015/10/13(火) 20:00:49.41ID:0lWpYFcj
http://andtokyo.jp
&TOKYO

sub TOKYO {

#だれか面白いルーチン書いて

50デフォルトの名無しさん2015/11/08(日) 01:17:27.81ID:ytCokofM
趣味と勉強を兼ねてcgi使ったホームページを作ってるんだが

セッションって格納した値は、同じルーチン内でしか使えないの?
格納したセッションをLocationでとんだ先で取得したいんだけど
何かと組み合わせないとそういうのできないのかな

51uy ◆Qawu9.2l1E 2015/11/08(日) 02:42:11.75ID:vxaYLa75
暗い趣味

52デフォルトの名無しさん2015/11/20(金) 13:59:09.99ID:ygWQ/grN
test

53バイキンマン2015/11/20(金) 14:01:31.29ID:ygWQ/grN
プログラム板でもやっぱそうか・・・・・

バグ発見!

名前欄に0と英数字で入力すると出力されないバグ!

変数の文字の長さで入力を判定して出力させれば

バグは治る!

すぐに対処を申請します!

54デフォルトの名無しさん2015/11/21(土) 21:10:33.25ID:WD+kKzRm
>>50
セッションって?

55デフォルトの名無しさん2015/11/21(土) 21:12:29.73ID:WD+kKzRm
あっ、2週間前のレスだったすまん

56デフォルトの名無しさん2015/11/23(月) 21:01:14.60ID:4+JhTSZZ
a

57デフォルトの名無しさん2015/11/23(月) 21:01:48.81ID:4+JhTSZZ
質問です。
#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);

my $ua = LWP::UserAgent->new;
$ua->timeout('7');

my $req = POST('http://yahoo.co.jp');

my $res = $ua->request($req);

print $res->content;

のようにすると文字化けします。文字コードの指定方法も分からず困っております
だれかおしえてくだあさい

58デフォルトの名無しさん2015/11/24(火) 00:50:23.60ID:oXoHv6i5
もらった文字列と、表示されている文字の、
文字コードが異なっているのだろう

文字を表示しているソフトの、文字コードを変えれば?
たぶん環境変数か設定項目にある

文字を表示しているソフトは、何を使っているの?

59デフォルトの名無しさん2015/11/24(火) 00:53:35.74ID:s947wE2H
>>57
文字化けしてないよ

60デフォルトの名無しさん2015/11/24(火) 00:56:04.50ID:s947wE2H
yahoo.co.jpは301 Moved Permanently だけど、move先を指定しても文字化けはない

61デフォルトの名無しさん2015/11/29(日) 01:33:56.66ID:rf1AiNx3
win10の64bit版でperl32bit版動くかな?
ちなみにwin7の64bitではperl32動いてます

62デフォルトの名無しさん2015/11/29(日) 03:12:21.07ID:rf1AiNx3
もう1個のスレのほうがメインみたいなのでそっちで聞いてきます

63デフォルトの名無しさん2016/02/12(金) 18:03:25.55ID:/96fpKw+
ヒアドキュメントで表示は
print <<"EOS";
(中略)
EOS
だけど
これをファイルに書き込むにはどうしたらいいんですか?

64デフォルトの名無しさん2016/02/13(土) 12:32:20.94ID:+ZsFTbcU
print $fh <<"EOS";
中身
EOS

65デフォルトの名無しさん2016/02/14(日) 03:31:58.89ID:kuEFe+X3
別解として
perl script.pl > file.txt

66デフォルトの名無しさん2016/02/14(日) 18:40:21.30ID:kuEFe+X3
もしかして、Windowsのスタート→プログラム→アクセサリ→メモ帳
を実行して
print <<"EOS";
(中略)
EOS
を打ちこみ、メモ帳のメニューのファイル→名前を付けて保存
のほうを知りたかったのですか?

67デフォルトの名無しさん2016/02/16(火) 07:29:00.22ID:y+ZjOqCo
いきなりだけどPerlのクラスの仕組み(かなり手抜き)

+ JavaScript の質問用スレッド vol.128 +©2ch.net
http://peace.2ch.net/test/read.cgi/hp/1454390682/401- のJavaScriptのthisの話の余談

大雑把に言うとPerlのクラス(オブジェクト)はハッシュに毛が生えたもの

※この段階ではクラスではない。ただのハッシュを返すnew関数とそれを入れたKlassパッケージ
package Klass;
sub new { return {a=>1, b=>2 } }
sub foo {}

Perlにはメソッドというものはない。全て関数。
コンストラクタ(一般的にnewという名前にする)もただの関数。

Perlではクラスやオブジェクトはこのようにして呼び出す。
my $obj = Klass->new();
$obj->foo();


ここで問題がある。$obj->foo()は、Klass::foo()を呼び出すことになるが、
$obj(ただのハッシュ)からどうやってKlass::foo()であることを知るのか?

ただのハッシュを返しているだけのnew関数にはそれは無理なので
ただのハッシュに毛を生やす。

sub new { return bless({a=>1, b=>2 }, 'Klass') }

これでただのハッシュじゃなくてKlassという情報がくっついたハッシュになった。
これで$obj->foo()はKlass::foo()を呼び出せる。

68デフォルトの名無しさん2016/02/16(火) 07:29:53.95ID:y+ZjOqCo
ここからが面白くて「アローの左側は関数の第一引数になる」というルールを追加する。
そうすると、Klass->new() という呼び出しは、 new('Klass') 相当になることがわかる。

ということで、newの第一引数にはクラスの文字列が入ってくるのでそれを使える。
sub new { my $class = shift; return bless({a=>1, b=>2 }, $class }

さらに、$obj->foo() の呼出も同じ。 foo($obj) 相当になる。
なので、sub foo { my $self = shift; } の$selfにはnewの戻り値である
毛が生えたハッシュ、つまりオブジェクト自身(他の言語のthis相当)が入ってくることになる。

このようにアローの左側が第一引数になる。という挙動は他の言語でも一緒で
JavaやC++は内部的にそれを行ってるだけ。

そしてJavaScriptでも.(ドット)の左側が第一引数になると考えると、
JavaScriptのthisがよくわからんという問題も簡単に理解できるはず。

JavaScriptのthisの話は元スレへどうぞ

69デフォルトの名無しさん2016/02/16(火) 10:39:05.36ID:rD0NYg0s
面白いというか、みんな知ってると思う

70デフォルトの名無しさん2016/02/17(水) 00:31:54.19ID:xaInBBRG
うん。そしてそれが有用ならもっと使われているはずだが、現実はあまり使われていない。
コードが実行時に生成されるようなダイナミックなものはデバッグ、テスト、保守がしにくい。

71デフォルトの名無しさん2016/02/17(水) 00:40:54.86ID:wnysiCN2
>>70
何の話してるのお前?

72デフォルトの名無しさん2016/02/19(金) 00:01:04.65ID:ifdckMGM
文字列の/*と*/で囲まれた部分と/*と*/に色をつけたい

例えば$str="/*abcdef*/";の場合は
$str =~ s/\/\*/<font color=\"green\">\/\*/g;
$str =~ s/\*\//\*\/<\/font>/g;でできましたが

$str="/*//////abcdef/////*/";の場合はうまくできませんでした。
どうすればうまくいくのでしょうか?

73デフォルトの名無しさん2016/02/19(金) 01:43:09.22ID:jNAd9H+F
$str = ̄ s{(/¥*.*?¥*/)}{<font color=”green”>$1</font>}g;

74デフォルトの名無しさん2016/02/22(月) 17:33:02.93ID:BncrDEhF
my $data = {
'data1' => [1,2,3],
'data2' => [4,5,6],
'data3' => [7,8,9]
};

上のような配列のハッシュで
ハッシュそれぞれの0番目、1番目、2番目のデータを
取り出したい場合どうすればいいのでしょうか


for (my $i = 0; $i < 3; $i++) {

print $data->{"data1"}[$i],"\n";
print $data->{"data2"}[$i],"\n";
print $data->{"data3"}[$i],"\n";

}

75デフォルトの名無しさん2016/02/22(月) 22:57:33.32ID:mB6Cjpa0
それで合ってるよ。
http://perldoc.jp/pod/perldsc
を読みなさい。
$data->{

76デフォルトの名無しさん2016/02/22(月) 23:01:42.17ID:mB6Cjpa0
ごめん、ちゃんと書いたのに何かアクシデントがあったようだ。もう一回送るよ。

それで合ってるよ。
http://perldoc.jp/pod/perldsc
を読みなさい。
$data->{"data1"}->[$i]
が正式な書き方だが (配列|ハッシュ)要素の参照が連続していれば間の矢印を省略してもいい。
個人的には、リファレンスだということを意識していたいから省略しないけどね。

77デフォルトの名無しさん2016/02/23(火) 03:28:09.20ID:Oh6h4g2T
シングルクォートもダブルクォートも要らねぇ。
my $data = {
data1 => [1,2,3],
data2 => [4,5,6],
data3 => [7,8,9]
};

print $data->{data1}[$i],"\n";

78742016/02/23(火) 09:55:37.41ID:usPktkPU
>>75-77
勉強になりました。
ありがとうございます。

79デフォルトの名無しさん2016/02/23(火) 10:27:03.85ID:usPktkPU
Web::Scraperでスクレイピングしているのですが
サンプルでは
use YAML;
warn Dump $res;
という書き方でこの方法だとデータの構造がよくわからないのですが

Dump何をつかっているのですか?
Ubuntu14.04の64bitを使っています。

80792016/02/23(火) 11:04:41.58ID:usPktkPU
>>79
データの構造はData::Dumperをイントールしたらわかるようになりました。
すみません。

81デフォルトの名無しさん2016/02/24(水) 18:07:14.97ID:E2TS40Hx
print $res->{list}[1]->{link}[0]->{url},"\n";
print $res->{list}[1]->{link}[0]->{title},"\n";

print $res->{list}[1]->{link}[1]->{url},"\n";
print $res->{list}[1]->{link}[1]->{title},"\n";

こういったデータをforeahで出力したい場合
???にはどのようにかけばいいのでしょうか

foreah my $i(???) {
print $i->{url};
print $i->{title};
}

82デフォルトの名無しさん2016/02/24(水) 19:01:01.43ID:1Q1vaK3L
>>81
なんで同じのが2書いあるんだよ

83デフォルトの名無しさん2016/02/24(水) 22:23:15.99ID:VYWYZ9lH
>>81
my $links = $res->{list}[1]{link};
for my $link ( @$links ) {
  say $link->{$_} for qw/url title/;
}

84デフォルトの名無しさん2016/02/24(水) 22:43:39.56ID:PL8yH0Su
>>83
say forの行が気持ち悪い。やり直し

85デフォルトの名無しさん2016/02/24(水) 22:47:52.27ID:VYWYZ9lH
>>84
やり直し(キリッ
じゃなくて自分ならこうするというのを示せよw

86812016/02/25(木) 09:33:24.21ID:AM2kna+z
>>83
ありがとうございました。

一度変数に保存してからすればよかったのですね。
my $links = $res->{list}[1]{link};

for my $link ( $res->{list}[1]{link} ) {
こういう書き方をしていてリストにするにはどうしたらいいのか
わからないので質問させていただきました。

たいへん勉強になりましたありがとうございました。

87デフォルトの名無しさん2016/02/25(木) 23:12:11.74ID:B0t5yMaC
>>86
デリファレンスは一度代入しなくてもできるけどちょっとわかりにくいかなって
for my $link ( @{ $res->{list}[1]{link} } ) {

新しい書き方だとこんなのもあったり(postfix dereferencing)
$res->{list}[1]{link}->@*

88デフォルトの名無しさん2016/02/26(金) 12:14:26.93ID:lmpGubNL
1位は「Python」、プログラミング言語別の平均年収ランキングが発表
http://www.mdn.co.jp/di/newstopics/44248/

2位には「Perl」(平均年収633万円)、3位には「Ruby」(平均年収606万円)がランクインした。

89デフォルトの名無しさん2016/02/27(土) 00:21:51.17ID:7I91l6Zs
>>67-68
超亀レスですがありがとうございます、勉強になりました!

90デフォルトの名無しさん2016/02/27(土) 00:49:08.38ID:fhIzDVzC
my $date = '平成28年2月26日18:55';
my $week = '金';

$date =~ s/日/日 $week曜日 /;

print $date;
をすると文字化けするのですが原因がわかりません。

91デフォルトの名無しさん2016/02/27(土) 10:36:17.16ID:VqgeV1ea
環境とか文字コードは

92デフォルトの名無しさん2016/02/27(土) 13:36:07.74ID:fhIzDVzC
さくらのレンタルサーバーのCGIでPerl 5.14.4です。
$weekを削除すると文字化けはおこりません。

別のプログラムではうまく動いているのですが

93922016/02/27(土) 14:09:58.43ID:fhIzDVzC
$week\xe6\x9b\x9c\xe6\x97\xa5になっているみたい

プログラム内に入力している日本語がprint表示するときにくずれるようです。

94デフォルトの名無しさん2016/02/27(土) 14:23:16.95ID:VqgeV1ea
${week曜日}
${week}曜日

>プログラム内に入力している日本語がprint表示するときにくずれる
やっぱutf8フラグかなあ…

95922016/02/27(土) 14:55:51.07ID:fhIzDVzC
すみませんプログラムミスでした。

96デフォルトの名無しさん2016/03/05(土) 17:24:53.21ID:jVpVtd3O
日付で教えて下さい
1/23 12:34
を西暦をくっつけて
2016/1/23 12:34に変換したいのですが

例えば未来の日時の場合は
5/1 12:34
を2015/5/1 12:34と1年引いた年にしたいのですが
下のプログラムでは
2015/05/02 06:45:10になります
年の引き算はどうすればいいのでしょうか

use strict;
use warnings;
use 5.010;

use Time::Piece;
use Time::Seconds;

my $t = localtime;
my $year = $t->year;

my $str = "1/23 12:34";

my $date = Time::Piece->strptime("$year/$str", '%Y/%m/%d %H:%M');

if ($t < $date) {
$date -= ONE_YEAR;
}

say $t->strftime('%Y-%m-%d %H:%M:%S');
say $date->strftime('%Y-%m-%d %H:%M:%S');

97デフォルトの名無しさん2016/03/05(土) 17:32:45.69ID:Kk7Ussws
>>96
いや、年の引き算って言っても一年は365日とは
限らないんだから、仕様を決めないとだめでしょ?

例えば2月29日の1年前は何日なのか?っていう。

98デフォルトの名無しさん2016/03/06(日) 18:03:04.50ID:OXa3i/Gy
$str =

99デフォルトの名無しさん2016/03/07(月) 00:42:40.54ID:Gv57dso9
>>96
年月日に分けたのち、年を -1 する。

100デフォルトの名無しさん2016/03/07(月) 06:16:56.64ID:eudRNLDZ
だからそうすると2月29日が出来てしまうって言ってるわけ

■ このスレッドは過去ログ倉庫に格納されています