Perl初心者スレ(マジレス回答)
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所 マジレス? じゃあ遠慮なく >>1 板荒らすために立てたんじゃないならさっさと削除依頼しろクズ 本スレでさえ閑古鳥が鳴いてるのに次スレ立てるから荒らし予備軍の温床になってんだよ 今日の糞スレ乱立を見ればわかるだろ 初心者なので CGI と Perl の区別がつかないこともあると思いますが、 どうぞ質問してください。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 回答者が現れるまで待ちましょう。 [プログラミング自体の経験が無いひとはまずココを読む] とほほのperl入門: ttp://www.tohoho-web.com/wwwperl.htm [厳選・オンラインドキュメント] perldoc.jp: ttp://perldoc.jp/ Perl メモ: ttp://www.din.or.jp/~ohzaki/perl.htm Perl のページ: ttp://homepage1.nifty.com/nomenclator/perl/ Perl の小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm # [Perl 日本語処理の基礎の基礎] # まず、以下の行を先頭に入れて下さい。 use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; # 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう # おまじないです。 上記の記述は1行で書くこともできます。 use encoding 'cp932'; # [Perl 日本語処理] 初心者にはこれが一番あってると思います。 徐々に経験を積んで、難しい記述にチャレンジしていきましょう。 そもそもプログラム初心者にPerl選択などありえない 初めてのPerl第6版と赤らくだ本は分量的にも内容的にもほぼ同じだしな ↑ながらく機能していない上にCGIの質問をすると怒られます。 Perlの質問をするとPHPの回答が返ってきます。 それでも構わないなら、どうぞ。 プログラム初心者じゃなくてPerl初心者な。PHPは卒業な。 PHPでいう、in_arrayは Perlではなんて関数ですか? >>19 ありがとうございます。 それからもうひとつ、 array_uniqueに相当する関数はどれでしょうか? my %uniq = map { $_ => 1 } @array; my @array_uniq = keys %uniq; %u = map {$_,1} @a; @u = keys %u; #チヂメテミタ my @array_unique = keys %{{map {$_,1} @array}}; perl 5.14 以降なら my @array_unique = keys {map {$_,1} @array}; ひと頃List::Utilが湧いたのはPHPとの比較が原因か ここでList::Utilを持ち出し、直後からスレが荒れるのが定番。 あるサイトにアクセスして数値を取得してreturn $num;で値を返す関数を作ったとします get_num(); my $num=200 while(1) { if(new_num() >=$num) { okと表示 } } okがうまく表示されません 毎回get_numでサイトにアクセスして取得しているというのが悪いんでしょうか?原因がわかりません教えてください new_num()で取得した値は $numより大きいです 大きいのになぜか比較されずにスルーで何も表示されずループです >あるサイトにアクセスして数値を取得してreturn $num;で値を返す関数を作ったとします ↑これは get_num() のことですか?new_num() のことですか? get_num() は return $num; しないんですか?戻ってきた値は使わないんですか? >毎回get_numでサイトにアクセスして ↑ get_num() は while の中にありませんが、この外にループがあるんですか? use strict; 落ちか 腕を上げたようだな、モダンPerl。 >>31 $|=1; それかprint "ok\n"; 改行いれとけ >>31 マジレスすると お前みたいな低脳には無理 荒らしの連立てしたスレを伸ばそうとしてる>>31 は荒らし 消えろやゴミが $|=1; my $num=200; ←セミコロン忘れるな while(1){ if(get_num() >= $num){ ← get_num()、な print "ok\n"; ← うるせぇやつがいるから改行、な last; ← これなけりゃ無限ループだわな } sleep(60); ← Web にアクセスするなら忘れるんじゃねぇぞ } なんで>>31 みたいなカスがプログラミングなんかに手を出したのか疑問。 >>43 そんなのが疑問になるのは お前が馬鹿だからじゃないだろうか。 文字列 $str の末尾の「.cpp」を「.o」に置換し新たな文字列 $new_str を生成したいのですが s/// だと元文字列を書き換えてしまいます コピーしてから置換でも良いのですが、書き換えずに置換する関数や演算子はないでしょうか? >>47 のような害虫はム板から駆除しなければならない。 >>47 演算子一覧くらい検索すればいくらでも出てくるだろ それすら検索できないって本物の精神異常? 煽り叩きに加えて今度はイコール厨まで参戦ですか ほんとスレの空気を悪くすることに関しては息ぴったりですねお前ら このスレは>>31 >>47 叩き基地害イコール厨等まともじゃない奴らの隔離スレだからな。 >>51 ありがとうございました 手元の資料に無かったので調べたら割と最近の仕様みたいですね >>57 さっさと初心者を卒業しろよってことかな? 出所者を見送る看守のようだ。 >>47 はマジでクズ 2chを代理検索か何かと勘違いしてないか? 質問してこういう扱いうけて荒らしてるのかこの粘着くんはw >>35 うまく出力されました $|=1;とは何ですか? 改行の理由も教えてください >>42 $|=1;をつける理由は? lastだとループが終わってしまうので >>32 >大きいのになぜか比較されずにスルーで何も表示されずループです ループして困っているのか、ループしたいのか質問をはっきりしろ こういう糞みたいな質問してる連中がム板のレベルを下げてる 馬鹿の>>63-64 が釣れたwww マジ釣り掘りwwwww >>61 荒らしは質問すらしてないよ。 質問者になりすましての煽りは入れてるが。 何で分かるの? あ、ご本人様ですか。 荒らしもやりながらこんな場末の糞スレチェックまでご苦労様です。 プロキシのレスポンスタイム計るにはどうするの? 教えてくれ 6.5s 5,8sとかあるだろ?あれ それはPerl限定の話でもなさそうだし、流石にWebProg板で聞いてくれ PHPでいうマジッククォートみたいなのない? sjisで送信するとき表とかがエスケープされずにエラーでちゃうんだけど 自動でエスケープしてくれる関数みたいなの無いの? 教えてください >>71 ふたつのことを混同してしまってると思われる 「Perl XSS対策」「Perl Unicode」でそれぞれググれ そして前者(XSS)にに関しては今後はWebProgへどうぞ >>72-74 追い出すなって。 ここは>>71 みたいな社会のゴミ用隔離スレなんだからさ。 PHPのマジッククォートとSjisっておんなじものなのか? 微妙にやること違うと思うぞw 初心者でUnicodeはきついかもな ごちゃごちゃしてて何がなんだかさっぱり分かんない 初心者にはshiftjisがいい Perlスレの頭にUnicode絡みのテンプレなかったっけ >>80 確信ないなら書くなゴミ さっさと失せろキメェんだよ それ言うなら use utf8; だろ EncodeはUnicode以外だって扱えるんだから でも牙が伸び過ぎると自滅してしまうこともある ttp://blog.nakatanigo.net/archives/50474313.html 88はいつもただの質問者を荒し扱いしたりしてる奴だろう、放置よろ。 初心者の彼女がjacode.pl使ってて時代の変化を感じた いつまでもEncodeでエンコしててもしょうがないしな ttp://kotobank.jp/word/えんこ ActivePerl5.16.1使用中です。 --- print DAT @dat; --- このようにして配列を書き出そうとしたのですが なぜかテキストファイルに繁栄されません。 何か情報をご存知の方いらっしゃいませんか? ファイルハンドルであろうDATのopen文はいかに 以下の一行スクリプトに文字を食わせて「XX月◯◯日のお知らせ!」の次の行から「-----」の前までを取り出そうとしています。 最期のs/^ +//は各行の先頭の全角の空白を取ろうとしたのですが、これが働きません。が、抜き取り自体は成功していました。 逆に、use utf8とすると/正規表現/が全くひっかかりらず何もprintされません。 perl -e ' #use utf8; while (<>) { if (/\d+月\d+日のお知らせ!/) { last; }; #skip the line; }; while (<>) { if (/-----/) { last; }; s/^\s+//; s/^ +//; print; }' perl -e ' use utf8; while (<>) { if (/\d+月\d+日のお知らせ!/) { last; }; #skip the line; }; while (<>) { if (/-----/) { last; }; s/^\s+//; { no utf8; s/^(?: )+//; } print; }' どうもです。 状況なのですが、use utf8すると全くおかしいです。/\d+月… /のマッチが全く成功しないので、 目的通りの結果が出ません。uset utf8しないとうまく動きます。 実はMacのautomatorから呼び出されていてGet text from Webpage actionでとってきたテキストが このperlに渡されているのですが…UTF-8の文字が来ているはずなのですが(指定のWebページのcharsetはUTF8)。 それはさておき ( ) / (?: ) の指摘ありがとうございました。上の行のs/^\s+//;と合わせて s/^(?:\h| |\xc2\xa0)+//; に書き換えました。 non breakable spaceも行頭に混じっていたので、そのUTF8表現のU+c2a0も追加。 これできれいに行頭の「空白」がとれて左詰めになりました。 とりあえずuse utf8;だけ殺して一見うまく動いているのでそれで利用を開始しました。 個人の趣味の自動化目的なのでそんな感じでまずはゴーしてしまいます。 utf8プラグマは作ったひとは使うのが簡単だと考えているんだろうけど、 使うひとにとっては非常に難しい。こういった処理モデルを理解しろと いうほうに無理がある。結論としてはutf8プラグマは使わないほうが よい。 もう省略の美学とか無くていいから(涙) ぜんぜん意味がわからない たすけて utf8にはまるのは日本固有らしい。海外では当初から見切りをつけていて 使われることはない。 この方法で重複を削除した場合 リストの順番は変更されますか。 それとも、重複が削除されるだけで、 順番はそのままですか。 my %hash = (); foreach (@list) { $hash{$_}++; } my @unique = keys %hash; print @unique; ご教示ください。 The keys of a hash are returned in an apparently random order. ハッシュのキーはランダムな順番で返されます(適当訳) http://perldoc.perl.org/functions/keys.html フリーソフトの利用は自己責任。 utf8作ったひとが助けてくれるわけじゃない。 自分の理解できる範囲内で使えってこった。 文字コードとしてのUTF-8を理解してもutf8プラグマの挙動は別物 オレオレ実装むき出しの仕様で理解できず使いづらい そこで省略の美学になる 至らない実装は利用者が補えるが、オレオレ仕様は直せない、か 2chのソースコード読みたい どっかに落ちてないかな? KENT本の中に似た外見のBBSってなかったっけ? >>112 糞スレ乱立してた基地害が立てたスレの一つで何言ってんの? ここは落書き帳だよ? www.kent-web.com/bbs/ 「2ch風」のマルチスレッド式掲示板です。トリップ機能、age/sage機能、 ID表示機能などが可能です。また表示部分をテンプレートファイルとし、 ユーザサイドでのレイアウト改造やデザイ改造が容易です。 >>115 こんなところに来てまでステマとかマジで気持ち悪いよお前 アタマおかしいんじゃねーの >>109 に回答するのが初心者スレのみっちょんだから CGIの紹介はスレ違い 本当にここには基地害しか残ってないんだな >>120 お前、CGI知らないのか? Common Gateway Interface(コモン・ゲートウェイ・インタフェース、 CGI)は、ウェブサーバ上でユーザプログラムを動作させるための仕組み。 件の掲示板を実現しているプログラムはPerlスクリプトだぞ? CGIとPerlスクリプトの違いも分からないのか? >>122 の言ってることは分かるがなぜここでそれを言うのか分からない。 >>123 落書き帳と同じだから必ずしも会話が成立してる必要はないんだよ 発作的に書きたくなった内容を書き殴ればいい このスレにいるのは心を病んでる奴がほとんどだからまともに相手してるとこっちまで病むぞ >>120 ばかだな、お前以外におれがいることを忘れているぞ アルパカ本ってどうよ? リャマ本ほど人気ないみたいだけど リャマ本をこなしてアルパカ本に進むわけだから当然脱落者がいるわな リャマ本⇒らくだ本⇒アルパカ本 >>128 え? らくだ本が間に入る? あれは上級者向きの本だお うるさいゴミ お前が勝手に勘違いしてるだけだクズ キメェから勘違い野郎は書き込むな はたして>>124 と>>130 のどちらが正しいのか このスレ、気持ち悪いな Perl使いにも、>>130 みたいな気持ち悪い奴が多いから納得 そもそも今のム板にPerlスレ立てること自体荒らし行為 WEBプログラミング@2ch掲示板でも荒らされてるぞ 3 名前:nobodyさん 投稿日:2013/01/19(土) 02:52:02.33 ID:??? カップ麺スレ増殖中・・・ 4 名前:nobodyさん 投稿日:2013/01/19(土) 03:47:52.32 ID:??? とんこつ系のインスタント麺で一番旨いのってどれだろう? あのカップに入ってるちょっと高めのやつって実は値段ほど美味しくない http://kohada.2ch.net/test/read.cgi/php/1358518487/3-4 Perlコーディング初心者質問スレ Part 67 WEBプログラミング@2ch掲示板でも荒らされてる 3 名前:nobodyさん 投稿日:2013/01/17(木) 04:27:37.19 ID:??? またラーメンスレかw 5 名前:nobodyさん 投稿日:2013/01/18(金) 23:16:14.71 ID:??? >>4 どうせ暇でしょ? 全てのスレを食べ物の話題で 埋めたらいいやん? http://kohada.2ch.net/test/read.cgi/php/1358342748/3-5 Perlコーディング初心者質問スレ Part 66 WEBプログラミング@2ch掲示板でも 4 名前:nobodyさん 投稿日:2013/01/16(水) 03:05:27.12 ID:??? カップ麺スレ 5 名前:nobodyさん 投稿日:2013/01/16(水) 04:54:54.33 ID:??? <前スレで出た話題> カップラーメン カップ焼きそば ユーリンチー カレー 水分の多い食品に揚げ物を入れる件 くずもち その他詳細などについては>>1 のリンクを参照 6 名前:nobodyさん 投稿日:2013/01/16(水) 20:45:34.73 ID:??? 高級な料理や食品に関しての話題が出ないわけだがw http://kohada.2ch.net/test/read.cgi/php/1358196208/4-6 Perlコーディング初心者質問スレ Part 65 WEBプログラミング@2ch掲示板で 631 名前:nobodyさん 投稿日:2013/01/14(月) 19:39:50.81 ID:??? >>627 ちゃんとしたワンタンを加えるともっと旨くなるぞ 632 名前:nobodyさん 投稿日:2013/01/14(月) 23:23:04.38 ID:??? 餃子とかでいいんじゃね 633 名前:nobodyさん 投稿日:2013/01/14(月) 23:42:44.97 ID:??? ラーメン屋のラーメンに入ってるチャーシューとスーパーで売ってるチャーシューって全然違うよな。 スーパーで買ってきたチャーシューってハムとラーメン屋のチャーシューの中間っぽい。 スーパーで普通のチャーシューも売って欲しいわ。 634 名前:nobodyさん 投稿日:2013/01/15(火) 17:00:15.77 ID:+UlCw0lP お前らってラーメン+ライスとかいける派? 俺はとんこつラーメンに限りいける 635 名前:nobodyさん 投稿日:2013/01/18(金) 19:15:41.39 ID:??? お好み焼きをおかずにご飯を食べる人種もいるらしい。 http://kohada.2ch.net/test/read.cgi/php/1343668425/631-635 Perlコーディング初心者質問スレ Part 64 Perl自体がオワコンなのにスレを立てることが間違ってる。 特に新しくPerlを学ぼうなんて正気の沙汰じゃないんだから初心者スレは不要。 せいぜい昔のPerlで作られたシステムの保守をやらされてるSE土方が情報交換するくらいだろ。 昔のPerlも覚えられず、かといって新しいPerlも覚えられない。 悔しいんですね?分かります。 あのぷっくりサスペンダーのおじさんもオワコンなの?最近見ないけど 古いPerlだと新しいソフトが書けないと考えるひとがいるようですね。 たいした仕事できなさそう。 どっちにしてもPerlはオワコン PHPがここまで進化しちゃうとPerlの存在価値はどこにあるんでちゅかねーw ごった煮の点で、PHPもPerlににている → Perlとおなじような運命だろう PHPっていうとWebアプリしか書けないイメージがある PerlはC言語/シェルスクリプトが担っていた分野をカバーしているので 今後も使われていくだろう Perlがオワコン説は単に初心者プログラマの脱落を意味しているだけで もともと使っていたシステム管理者らが使うのをやめることはない PerlっていうとWebアプリしか書けないイメージがある PHPは当初よりかなり進化しているので 今後も使われていくだろう Perlがオワコン説は初心者プログラマがPerlを選らばないとう現実を意味しているから もともと使っていた老害が使い続けるだけという結末になる PerlもPHPもどちらも書いてると、PHPの方がクソだと思えてくる。 Perlっていうとぷっくりサスペンダーのおじさんのイメージがある ときどきアニメを例えに使うあのなぞなぞ好きなおじさんだ 甲高い声が人気なので今後も使われていくだろう Perlがオワコン説はWindowsユーザがPerlを選ばなくなったとう現実を意味しているから もともと使っていたJperlを使い続けるしかないということになる perlからC言語で作った実行ファイルを実行するときC言語のソースが printf("A"); scanf(); ---Bを入力 printf("C"); のときにこの実行ファイル実行結果ををperlで受け取るときperl側で ACとなってしまいます。 これを AB C として受け取りたいのですがどうすればいいでしょうか? >>152 scanf()で受け取った文字列をprintf()してはダメなの? >>152 自分で調べろよゴミが そもそもここはスレ立て荒らしが立てたスレだ >>152 お前みたいな馬鹿にプログラム組んでもらわなくても誰も困らないからさっさと回線切れ。 futomi's CGI Cafeの「清き一票!(投票CGI)」というフリーのCGIを元に投票項目を増やしたいのですが、HTMLの方で増やしたname属性をCGIの方に反映させる方法がわかりません。 もう2週間ほどPerlについて書いてあるページを調べ回りながら試行錯誤を繰り返しているのですが、どこをどういじればいいのかよくわかりません... ヒントだけでもいいので教えてください。お願いします。 何で作った奴にきかずに赤の他人にきいてんだ? しかもタダで教えろとか本当にゴミだなお前。 回線切れ乞食。 >>159 すみません。 2004年に配布されたもので結構昔のものなので製作者様の方に教えてもらうことができなくて、ここなら何かヒントになることだけでも教えていただけると思ったので... >>160 Perlを最初から勉強すればすむ話だろゴミ それにそれが情報乞食をする理由になるの? 本当に乞食じゃねぇのこいつ >>160 Perlを使いこなすために書籍に何万と投資をし、書籍を読んだりコードを書いたりするのに何年と時間を投資し、 そうやって身に付けたものをお前みたいなクズにタダで使う理由は? 投票項目の多いCGIプログラムを入手するのが目的なのか、Perlのスキルを 高めたいのかどっちなんだ? モダンPerlを勧めるひとは熱心なあまりキチガイみたいに見えてしまうってこと? でも本来のキチガイとは違って、モダンPerlやめれば症状が改善されるんだよね? 改善された例を見たことがない。キチガイは自滅してオワコンだ。 俺は間違っちゃいない!世界が間違ってるんだ! 永遠に叫び続ければいいよ。 Sublime2 TextからPerl実行出来るようにしてるが頗る便利 テキストの処理がいつでも出来る それとフォルダ毎にzip圧縮するときなんかに使ってるわ D&Dするようなアプリだとフォルダまとめて圧縮しちまうからな print は引数を省略できるけど、 join は引数を省略できない どの関数は どの引数を省略できるのか 省略した時はなにがあてはまるのか の標準関数の分の一覧ってある? プログラミングPerl 改訂版 ママゾンだと1円です 標準出力を乗っ取る機能ある? 普通にprintしてもフィアルに書き出すみたいなやつ >>179 それって普通リダイレクトでやるもんじゃないの? そもそも標準出力=「画面とは限らない」ものなんだから >>179 ttp://perldoc.jp/func/select ただの不備を精神異常とか二度と来るなとか罵るのもどうなのよ だから過疎ってんだよ >>187 Perl関連スレ、何故か荒らしが住み着いてるからなあ 自分が昔書いたプログラムの a{\%$b}=c の意味がわかりません 失礼しました正確には $self->{a}{\%$b}=$c でした。助けてください。 >>190-191 マジレススレだからマジレスすると、書き込み前の確認すらできないほど頭の悪い奴にプログラミングは向いてない。 早く回線切れ。 ごみがまたパールの保守性の低さを証明してくれましたw PHPだとこういった事態の発生する可能性がパールより低い 保守性を考えるならPHP Perlの場合は、保守性を考えると非・オブジェクト指向のほうがいいよ $self->{a}{\%$b}=$c は分かりやすくすると $self->{'a'}->{$b} = $c になる ただ $b は本当にハッシュのリファレンスなの? >>195 はコードも読めないのに住み着いてるのか・・・ あ、>>195 であってたw、俺が読めてなかった、ごめんw >>195 を貶めてる奴らも 回答できてない時点で同レベル Perlなんか使ってる時点でw ☆統計開始以降利用人口史上最低記録絶賛更新中☆ ttp://www.tiobe.com/index.php/content/paperinfo/tpci/Perl.html ちろべとかどうせ海外の話でしょ、ひまわりが載ってないしw 韓国も入ってないだろうな。 韓国ではRubyよりPerlのほうが圧倒的に人気だから そんなIT人口の多いIT先進国のデータが入ってたら絶対Perlのほうが上位に来るよ。 韓国では何をきっかけにPerl人口が増えたの?例えばO'Reillyとかは韓国語版を 出していないよね?韓国のひとは何を使って勉強したの?教えてえろいひと >>195 ありがとうございます。それをヒントに少し思い出してきたかも。 そう言ってるだけのお前も迷惑がられてる自覚はないわけね 俺も荒らし…まあそうだろうなあ、自覚は無いようだけどお前も荒らしだよ? ここは常に罵りあってる気持ちのよいスレッドですね 初心者も質問しやすくて大変良い雰囲気だと思います >>190 みたいな奴がそうなるように 仕向けてるんだよ。 リファレンスをハッシュのキーに使ってもいいの?何か間違えてない? そもそもPerlを選択する時点でかなり間違えちゃってるから別にいいんじゃね?w 大元で間違ってるのに枝葉の間違いばかり気にする馬鹿ってたまにいるよな。 中国産の野菜は農薬が酷いが、中国産のキャベツと中国産の白菜のどっちが安全か考える馬鹿。 そもそも中国産の野菜を選ぶ時点で間違ってると気付かない馬鹿。 低所得で納税額の少ない社会のお荷物に多い傾向。 >>215 馬鹿というより向上心がないんでしょ 一つ言語を覚えたらそこに落ち着いてしまうタイプだと思われ 向上心のない奴は何やっても駄目、他人に懇切丁寧に教えてもらって半人前とかね 居残りさせられて先生がつきっきりで人一倍教えてるのに50点しか取れない奴いただろ 新たにPerl覚える人間が居ないとでも? 良く出来たツールだと思うよ、ホント Perlを覚えられないひとのためにできたのがPHP。PHPはPerlの機能限定版。 だからCGIにしか使えない。 >>220 >>221 みたいな認識でPHPを否定してPerlを使い続けてるのがPerl厨なんだよ PHP使うくらいならPerl4を使うけどな、このスレ的にも そもそも用途が全然違うものを比べる意味が解らないな Perl使える奴がわざわざぺちぴー入れてまで使う理由がない >>222 PHPのクラスやトレイトを Perl4でどうやって実装するの? 2つも3つも糞スレ建ててんじゃねーよゴミPerler >>226 まず必要あるかないかは、必要あるという前提にしましょう。 別にPHP専用用語ではないのだから、世界的には必要あるという流れです。 その前提で、どうやって実装するのか答えてください。 これからは質問者が来ても全部>>230 のレスしか返りません。 #!/usr/bin/perl $buffer = $ENV{QUERY_STRING}; @pairs = split( /&/, $buffer ); foreach $pair ( @pairs ){ ( $name, $value ) = split( /=/, $pair ); $FORM{$name} = $value; } $A = $FORM{name1}; $B = $FORM{name2}; print "Content-type: text/html\n\n"; print << "_EOM_"; <html> <body> A*B = $A * $B </body> </html> _EOM_ 上みたいなプログラミングを組んで、A=とB=にそれぞれ任意の数字を入れるとA*Bの答えが表示されるようにしたいんですが、 いざ実行してみても上のプログラミングがそのまま表示されるだけで正しい結果が得られないのですが、 どうしたらよいでしょうか。 >>232-234 おかしいのはお前の頭だ 基本的なこともできてないくせに他人に質問とか頭腐ってんじゃねーの >>234 >>232 ,>>233 が板違いだということに気付かないのがおかしい。 平気で板違いの書き込みをするキチガイは迷惑。 お前みたいなクズはリアルでも迷惑がられてるんだから自覚しろ。 >>232 =基礎をやらずにいきなりプログラミングから入る典型的なゴミ 目的達成までの手順すら把握できてないからプログラミング以前の問題 何やっても駄目な奴のパターン 人生乙 >>237 人生乙は言い過ぎ。 高卒以上なら人生乙だけど、 >>232-234 みたいな小学生は 中高で挽回できる可能性がある。 >上みたいなプログラミングを組んで、A=とB=にそれぞれ任意の数字を入れるとA*Bの答えが表示されるようにしたいんですが、 >いざ実行してみても上のプログラミングがそのまま表示されるだけで正しい結果が得られないのですが、 日記はブログに書け >どうしたらよいでしょうか。 今すぐプログラミングやめろ そして二度とくるな Perl系スレは質問者が叩かれると張り切って答える奴がいるから 質問したら自演で自分を叩くのが常套手段 >>234 スレ違いのネタで荒らす以外やることないわけ? スレ違いどころか板違い 頭が悪いにも程がある 発達障害かもな >>232 PHPなら一瞬で片付く案件 <?php $x = $_GET['name1'] * $_GET['name2']; echo( $_GET['name1'] . " * " . $_GET['name2'] . " = " . $x ); ?> >>234 入門書1冊読めば大抵書いてあるはずだが・・・ 本1冊買えない乞食か? そんなに金がないならプログラムなんかやめてバイトでもしたほうがいい 日雇いでも書籍1〜3冊買える金もらえるぞ 初心者スレってかいてあるだろーが字よめねぇのかよカス >>248 だよね。 初心者だったらスレ違いだろうが板違いだろうが 気違いだろうが許されるよね。 >>250 板違いは許されんよ。 基地外はスルーだよ。 頭悪いのはテキトーに対応するべきだよ。 初心者は自力で解決しようとしない奴のことではないぞ >>232 A*B = $A * $B の部分を A*B = @{[ $A * $B ]} >>253 板違いのゴミ(>>253 )にエサを与えないでください。 エサを与えるとゴミ知能の>>253 が味をしめて今後も荒らしに来るようになります。 >>255 を見れば分かるが 「板違いは荒らし」という人間 = 荒らし この思考回路がPerl厨 >>256 残念ながら、思考回路も間違ってるしPerl厨でもないなあ 板違いの指摘そのものは問題ではないよ、実際のところ >>232 は板違いだしな ただ板違いへの対応ってのは ・板違いと指摘する ・徹底してスルーする であるし >>254 が板違いのゴミと呼ぶ >>253 は 「板違い」ではなく「板違いに誤った対応をした人物」でしかない。 しかも内容は相手を煽るような罵倒語ばかり。 誤った煽りは、結果的にはその人物の発言を増やすことになる。 だから >>254 も荒らしってことなんだよ。 ああ、荒らしにレスするのも荒らしだからな 俺が荒らしと言われても、勿論構わないよ? 荒らしにレスしたことには間違いないしな。 >「板違いは荒らし」という人間 = 荒らし Perl厨はいちいちこんなこと考えてないと思うぞ。 単に 気に入らない奴=荒らし ってことだと思われる。 質問させてください。 現在、NEなのですが、社内SEを目指しています。 その時に、サーバ作業を簡単に処理させる言語が必要にりそうなのですが、 Perlは向いていますでしょうか? 掲示板とかを作るつもりはありません。作業の効率化が目的です。 隣の席のプログラマさんに聞くと、 Perlは古くてCGIにはもう未来がないよー、ってお勧めされないのですが… >>259 IT系で上を目指そうって人間に何でPerlなんて選択肢があるわけ? そこらへん考えたほうがいいよ。 SEならITに関しては常に最新の動向を知るためにアンテナ張ってなきゃならないし、 アンテナ張ってればPerlがいかに駄目かというこてが分かる。 SE目指すならその辺りを自分で調べられるようになってたほうがいい。 >>259 PHPのほうがいい 作業を簡単に処理させるスクリプトとかって最初はそのつもりがなくても便利ならそのまま他のものを作るときに組み込んだりする エンジニア以外でも有用な場合はWebインターフェースにして提供することなるけどその場合にPHPで書いてあるとインターフェース作るだけですぐに提供できる >>259 マジレスすると今現在はRuby 但し3ヵ月後、半年後は分からん 自分でその情報を追えないならSEはやめとけ 今現在既に追えてないみたいだけど >>259 そもそもその文脈でCGIは全く関係ないよ。そこに気付けないなんて釣りだろ? >>260-263 ありがとうございます! javaか、PHPか、perlで悩んでました。 色々調べると、PHPが入り易そうなので、、 明日、本屋に行って、決めます。 ※CGIは、掲示板とか作るのであって、検索とかするのとは違うなあ、 と思いながら、プログラマさんの意見を聞いていました。 PHPが第一候補だったのですが、某サイトで、 PHPは、WEB系以外には、まったく意味がない、との様なコメントがあり、困りました。 javaは、いきなり入るには、まだ敷居が高いかなと悩みました。 perlは、単に簡単な、検索や置換には適しているようなコメントで一気に候補に挙がりました。 これらから悩んでいたんです。コメントありがとうございます。 >>266 そのコメントとやらの投稿日時と信憑性も確認しろよ まさか去年の夏以前の投稿で、しかも第一線で活躍してい"た"奴の投稿じゃないだろうな 3ヵ月以内の投稿で、しかも第一線で活躍してい"る"人の投稿なら信用しろ そしてそういう人ならまずPerlを候補に挙げることはない まぁ第一線で活躍してるわけでもない俺のこんな匿名の投稿も信憑性がないだろうから 第一線で活躍してる人がPerlなんか使わないということは自分の目で確認してくれ >>267 投稿日時、第一線は確認していませんでした。 すみません、助言、ありがとうございます。 >>266 PHPがWeb系以外に使えんのは本当 Perlでも良いけど、RubyやPythonも有効だよ まあ、まずは最初にシェルスクリプトだけどね と言うか、PerlスレにPHPのこと聞く時点で釣り >>269 >PerlとLispが結婚して隔世遺伝が黒魔術で生まれた言語。 >Javaは硬度8くらい、Pythonは6くらいになるのに対して、Rubyは3くらいになる。 との記事を見つけました。いつの記述かわからないのですが(汗) Rubyも明日、本屋で漁ってみます。ありがとうございます。 >>270 すみません。退散します。 みなさん、マジレス、ありがとうございます。 >>232-234 _EOM_なんて使っちゃだめだよ。見づらい。 print "Content-type: text/html\n\n"; print "<html>"; print "<body>"; print "A*B = $A * $B"; print "</body>"; print "</html>"; print "あいうえお"; ↑これを文字コードをeuc-jpで保存してコマンドプロントからこのファイルを実行して コマンドプロンプト上に文字化けなく あいうえお と出力させるにはどういうコードを追加すればいいの? >>274 はちょっと疑問に思っただけで何かするのに必要なワケじゃないので無理して 答えようとしないで下さい。たぶんちょっとググった程度で分かるようなことではないです。 >>276 うおお、すごい、あっさり出来てしまった・・。 今日一日↓こんなのでやろうとして泥沼にハマってました。 use encoding "euc-jp"; binmode STDOUT, ':encoding(cp932)'; スーパーハカーさんどうもありがとう〜 print +(3,2,1,),"\n"; ↑これ、+記号を消すと改行が反映されなくなるんですが、この+記号って どういう意味ですか?ググるためのキーワードだけでもおねがいします。 ググると +{ } は出てきたんですが +( ) はなぜか見つかりませんでした。 >>278 (print(3,2,1)), "\n"; +() は scalar () とほぼ同等。 +{}は、ブロック中の戻り値(?)をスカラーとして評価しますって意味。 +()は、リストとして評価しませんよーって意味。 perldocのperlopの Terms and List Operators (Leftward) と Unary "+" を参照してください。 >>279-280 なるほど、+{ } と同じような使い方だったんですね、ありがとうございました。 perldocもこれから読んでみます、多謝。 windowsの隠しファイルを判別する方法を教えてください >>282 http://search.cpan.org/dist/Win32-File/File.pm use Win32::File qw(GetAttributes HIDDEN); GetAttributes($ARGV[0], my $attr) or die $!; print +($attr & HIDDEN) ? 1 : 0; 掲示板のCGIを設置したんだけど、<a href="./bbs/mtbbs.cgi?">って感じにリンクするようにして、http://172 では、ちゃんと作動したんだけど、 実際にFTPに転送すると、作動しないどころか画面が写らない 500エラーが出てくる 原因に関してはまだわかんなくて、調べてるんだけど、そもそも思ったのが<a href="./bbs/mtbbs.html">ならまだしも<a href="./bbs/mtbbs.cgi?">なんて、直にリンクすることなんてできるの? >>285 リンクはできる 動かない原因は別にある 知恵袋で質問したら回答どころか閲覧すらなさすぎワロタ・・・ 質問してもどうせまともに答えてくれないんだろうな どこ行っても解決しないわ 複数のRSSフィードを結合して一つのRSSを生成したい。 その際、「生成されたフィード記事のリンクURLすべてを任意のリンク先に指定する。」 このやり方を教えてください。 XML::FeedPP、XML::TreePPというモジュールを用い、下記のCGIプログラムを使用して自動更新する1つのフィードを生成するところまでは出来ました。 しかし、他の部分はチョロチョロと変えることができるのですが、記事リンクだけはどうしても変えることができません。全部の記事リンクを、ある1つのリンクに変換したいだけです。 #!/usr/bin/perl use XML::TreePP; use XML::FeedPP; my $feed = XML::FeedPP::RDF->new(); $feed->merge( "結合したいrssフィード1" ); $feed->merge( "結合したいrssフィード2" ); my $now = time(); $feed->sort_item(); $feed->pubDate( $now ); my $atom = $feed->to_file( "index.rdf", "UTF-8" ); print "Content-type: text/plain\n\n"; print "出力完了\n"; 使ってるレンタルサーバーはロリポップです。 複数のフィード(RSS、Atomなど)をまとめるCGI http://blog.audiofan.net/archives/491385.html [Perl] XML::FeedPP - RSS・RDF・Atomフィードの解析・生成・変換・結合 http://www.kawa.net/works/perl/feedpp/feedpp.html XML::FeedPP https://metacpan.org/pod/XML::FeedPP#feed-remove_item-index-or-link http://search.cpan.org/ ~kawasaki/XML-FeedPP-0.43/lib/XML/FeedPP.pm ttp://s1.gazo.cc/up/88224.jpg こういった10行で一組のデータの中に --- 市民の... yerles warrior --- というパターンが多くあります。 マッチ検索したいのは --- 市民の... dog warrior --- というパターンです。 "市民"という文字を見つけたら 2行下に "dog"という文字があるならば その、"市民の..."を出力して欲しいです。 ファイル読んで単純マッチするぐらいしか今はできません open (my $in , "<" , "./cdatan_5_101.s2"); while (<in>){ if (/yerles/){print "matched\n"} } close $in; } 凄い。ありがとう。 出てきたshiftとか勉強してみます 感謝 どこにshiftの出番があるのか?と思ったらそう言うことか。 普通に配列に突っ込んで、マイナスのインデクスでアクセスすりゃいいやん。 $ perl -Mvars=@a -lne 'push @a, $_ ; next if !/dog/ ; next if $a[-3] !~ /市民/ ; print $a[-3]' File メモリ喰いが気になるのなら、 $ perl -Mvars=%h -lne '$h{$.} = $_ if /市民/ ; next if !/dog/ ; next if ! defined $h{$. - 2} ; print $h{$. - 2}' File とか、で節約すりゃいい。、、、けど、今時そんなの気にする必要もないだろ 上のワンライナーでやってる事は、 $ perl -MO=Deparse -Mvars...略 でわかる。 恰好をつけるなら、リングバッファでも書くところですが、回答としては、あんまりだと思ったので。 2行固定なら、別に使わなくても。 perl -ne '($_, $x, $y) = ($x, $y, $_); $y =~ /dog/ && /市民/ && print' File 何も考えなくていいなら、正規表現でバッサリ。 perl -e 'print((local $/ = <>) =~ /(^.*市民.*\n).*\n.*dog/gm)' File >>300 1ヵ月以上もお前のレスにレスがつかないのはなぜか分かる? お前みたいなゴミクズは誰も必要としてないからだよ。 一般社会ではあからさまに無視するわけにもいかないから当たり障りのない対応をしてもらってると思うけど、 お前ハッキリ言って迷惑だから。 ゴミクズはネットでもリアルでもできるだけ社会と接点持つな。 Test Summary Report ------------------- t/config-finder.t (Wstat: 512 Tests: 0 Failed: 0) Non-zero exit status: 2 Parse errors: Bad plan. You planned 26 tests but ran 0. Files=86, Tests=923, 636 wallclock secs ( 2.64 usr 1.67 sys + 247.77 cusr 297.98 csys = 550.05 CPU) Result: FAIL Failed 1/86 test programs. 0/923 subtests failed. Makefile:945: recipe for target 'test_classic' failed make: *** [test_classic] Error 255 PETDANCE/ack-2.12.tar.gz /usr/bin/make test -- NOT OK //hint// to see the cpan-testers results for installing this module, try: reports PETDANCE/ack-2.12.tar.gz Running make install make test had returned bad status, won't install without force Failed during this command: PETDANCE/ack-2.12.tar.gz : make_test NO Windous上のcygwinとLinuxでCPANのackをインストールしているところでつまずきました 上のエラーはcygwinの方のエラーです これは、curlを使えば回避できるそうですが http://d.hatena.ne.jp/katz_24/20130210/1366387522 setup.exeを利用したインストールでも何故かインストールができずに手詰まりになりました ack-2.12.tar.gz を回答してみても訳が分かりません ackをインストールする手はありますか? make test had returned bad status, won't install without force まけ出来てるのならいんすこ自体は可能 force installでcygwinの方に入れました 正常に動作します ありがとうございました Linuxの方は、手っ取り早く sudo aptitude install ack-grep しました おかげさまで両方にackが揃いました 感謝します xmlを取得して中身を s|。|。<br>|g; して句読点ごとに改行させたかったのですがどうしても出来ません なにか理由があるのでしょうか 初心者なもんで変な質問をしていたらすいません エスパーじゃないんだから、そんな質問で答えれる訳ないだろ。 せめてサンプルとなる簡単なxmlを出せよ・・・ 申し訳ないです >>306 デコードはしています >>307 申し訳ありません wikipedia.simpleapi.net/api?keyword=Test&output=xml >>308 テストした結果、普通に置き換えできます。 取得方法に問題があるんだろう。 ってか、こんな質問の仕方じゃスレ全部埋まるわ・・・ 問題が起きてるサンプルコード出してみ >>308 ちげーよ utf8のファイルをeucのスクリプトでマッチしようとしたんじゃないの、ってこと >>310 shift-jisのスクリプトでマッチさせようとしました 不味かったでしょうか >>311 なら、どっちかの文字コードにencodeして合わせる > perl -e "print (5+5)/3" 10 なんで? print -e "print((5+5)/3)" >>314 http://perldoc.jp/docs/perl/5.18.1/perlfunc.pod > 括弧を使うときには、単純な、(しかし、ときには驚く結果となる規則が 適用できます: > 関数に見えるならば、それは関数で、優先順位は関係ありません。 (略) > Perl に -w スイッチを付けて実行すれば、こういったものには警告を 出してくれます。 2000年には既にwarnings実装してんのに なんで未だに、-w推薦文章なんか残してんだろーね? -Mwarningsのエイリアスって訳でもねーし。 【誤】print -e "print ((5+5)/3)" 【正】perl -e "(print(5+5)) / 3" ついでに -w と -Mwarnings は別物。-Mwarnings で -w の代わりになるわけではない。 >>318 -w ≠ warningsは常識だろ。 で、「use Unicodeは、use Jcodeの代りじゃない」ってレベルの事を言ってるぞ、おまえさん。 -wが石頭だから、より制御しうるwarningsを実装したんだろが。 5.20のperllexwarnがスッキリしててワラタ。 再帰中に再帰の深さを出したいんだけどlocal使っていい? local $::count = $::count + 1; もっと普通の方法ある? 引数で渡す sub foo { my ($arg, $count) = @_; ...; foo($arg, $count) if $count++ < 10; } ありがとーーー。 複製される変数の数には変わりがないよね、たぶん。 上はグローバル変数と言うのが気に入らなくて、下は引数で扱う値が増えるのが気に入らないが。 while(@all){ ((shift @all) eq 'cut') and last; } whileを修飾子として書くと落ちるんだが誰か理由を教えてくれー ((shift @all) eq 'cut') and last while(@all); evalでも落ちた 英数混じった文字列の中から2桁の数字にマッチさせたいのですが、 /\d\d/だと3桁以上の数字の前2桁にもマッチしてしまいます。 /^(\d\d)\D|\D(\d\d)\D|\D(\d\d)$|^(\d\d)$/ こんなことするより簡単な方法ないでしょうか? % perl -le 'print q{22} =~ /[^\d]\d{2}[^\d]/' % perl -le 'print q{22} =~ /(?<!\d)\d{2}(?!\d)/' 1 % perl -le 'print q{22} =~ /(?:^|\D)\d{2}(?:$|\D)/' 1 /(?<!\d)\d{2}(?!\d)/ これが期待通りの結果が得られました。 (?<!)とか(?!)とかこれまで使ったこと無かったので勉強になりました。 ありがとうございました。 以下のような日付が下から上に並んでいるoriginal.txtがあるとします。 これを、日付を逆順にしたoutput.txtに整形するプログラムを作りたいです。 Windowsで、Batch fileとPerlで作れたらと考えています。よろしくお願いします。 <original.txt> ########## 20141203 ########### DNINITIENK FDKHJKDKKSK ・・・・・ ########## 20141202 ########### TUNINJKDF NIGHALKDK ・・・・・・ ########## 20141201 ########### ABCDEFGHIJKE LMNOPQRSTUV ・・・・・ <output.txt> ########## 20141201 ########### ABCDEFGHIJKE LMNOPQRSTUV ・・・・・・ ########## 20141202 ########### TUNINJKDF NIGHALKDK ・・・・・・ ########## 20141203 ########### DNINITIENK FDKHJKDKKSK ・・・・・・ >>332 \bだと英字と数字の境目は単語の区切りにならないみたい。 centosで元から入ってるperlとは別にソースインストールしたperlを別に入れました。 新しくインストールしたperlで以前から入っていたCPANモジュールを使いたい場合、再度入れなおす必要ありますか? >>334 perl -Mvars=%h -ane '$a = $F[1] if @F == 3 ; $h{$a} .= $_ }{ print $h{$_} for sort { $a <=> $b } keys %h’ original.txt >>336 モジュールの共用は避けるべき >>334 use 5.016; use warnings; my $boundary = qr/^#+\s+\d+\s+#+\s*$/; open(my $in, "<", "original.txt") or die; my @data; my $chunk = ''; while(<$in>){ if (/$boundary/ and (length($chunk) > 0)){ push @data, $chunk; $chunk = ''; } $chunk .= $_; } if (length($chunk) > 0){ push @data, $chunk; } $in->close; open(my $out, ">", "output.txt") or die; $out->print(reverse @data); $out->close; 単純に逆にするだけか perl -00pe '$_ = join q{}, reverse ( split /(?=^#)/m)' my $initial_title_ = "\$" . "$initial_threads" . "_begin"; $initial_title_ = eval $initial_title_; 1行に短くなりませんか? my $initial_title_ = eval "\$${initial_threads}_begin"; こういうこと? >>342 ありがとう eval使うのが3つあったから 6行が3行になったよ $seach_wordに日本語を入れたいのですが、それだとマッチしません。どうすればよいでしょうか? w3m -dump -cols 160 http://peace.2ch.net/test/read.cgi/tech/1349538519/ | ~/Perl_instance/resSearch.pl #!/usr/bin/env perl use strict; use warnings; use utf8; my $seach_word = ">1" ; my $found_res = 0; my $res = ""; while (<>) { if (/^\d/x) { # out put, flash if ( $found_res == 1 ) { print $res; $found_res = 0; } $res = ""; } else { # searching if (/$seach_word\b/x) { $found_res = 1; } } # buffer lines $res .= $_; } あ、 binmode STDIN , ":utf8": で binmode STDIN , ":utf8"; binmode STDOUT , ":utf8"; my $seach_word = "日本語" ; で同様のコマンド叩いて、つまり344が拾えるはずが 何故かヒットしません <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> w3m -dump -cols 160 http://peace.2ch.net/test/read.cgi/tech/1349538519/ |nkf -g UTF-8 UTF-8しか扱わないのにちょっとエンコード回りは複雑だ webサイトの表形式データ(横方向は5列、縦方向は不定で100行ぐらい)を取得するのに、 正規表現の繰り返しマッチング m//g を使って、結果を配列に入れてるんだけど、 もっと簡単に取ってくるモジュールはないでしょうか? >>350 >webサイトの表形式データ の形式が分からんとなんとも。 >>346 ヒント助かった。 use Encode qw/encode decode/; my $enc = 'UTF-8'; sub d($) { decode($enc, shift) } sub e($) { encode($enc, shift) } my $seach_word = "日本語"; my $found_res = 0; my $res = ""; while (<>) { if (/^\d/x) { if ( $found_res == 1 ) { print $res; $found_res = 0; } $res = ""; } else { my $seach_word_ = e$seach_word; if (/$seach_word_/x) { $found_res = 1; } } $res .= $_; } >>350 >>351 例えば、こんな表です http://ke.kabupro.jp/hist/20150107.htm 今はHTMLのソースを見て、証券コードを正規表現で抽出するために、 =~ m!<tr><th><a\shref[^>]+>(\d{4})<\/a>!ig などとして配列へ入れているのですが、泥臭いです。 もっとスマートに取得できるモジュールは無いかと思った次第です。 (続き) 例えば統計計算用のRでは readHTMLTableというモジュール(パッケージ?)があり、表形式のデータを含んだurlを指定すれば、簡単に取得出来るのですが。 >>353 HTML::TableExtract http://search.cpan.org/ ~msisk/HTML-TableExtract-2.12/lib/HTML/TableExtract.pm Web::Scraper http://search.cpan.org/ ~miyagawa/Web-Scraper-0.38/lib/Web/Scraper.pm my $tmp = { $a => sub { $_ = 処理A}, $b => sub { $_ = 処理B}, $c => sub { $_ = 処理C}, }; ループ中に↑のように書いている場合、一つの変数に対して複数の処理($a に 処理A' を追加)を 加えたい場合、どのように書くのでしょうか? 凄い初歩的な質問だと思うのですが真剣に行き詰まってます 教えてください _HOGE_ こんな表記の変数ってなんて表現するんですか? またネットでこういう変数について調べたいときは、 どのように検索したらヒットしますでしょうか。 Perl __ で検索しても全然それらしい記事が発見できず _HOGE_は変数じゃないからヒットしないのが正解 もしかして:ヒアドキュメント なるほど・・・独自のプログラム記述なんでしょうかね・・・ Perlの変数記述方法じゃないことがわかって少し安心しました もう一回解析してきます >>361 さんの回答で先入観が排除され、 意味がわかりました。 $mes =~ s/_HOGE_/$name/g; 文字列に埋め込まれた_HOGE_を別の変数に代入されてる文字列と置換させていました。 ありがとうございました。 なんでも受け付けるからって、 __HOGE__ をヒアドキュメントとして使ってる人は、単に 特殊リテラルを理解してない人。 質問に超絶遅レスするなら、 __HOGE__は、ほんとうに HOGE と書かれていたなら、 特殊リテラルのまねっこ。 DATA, END などなら、perldoc.jp で perldata から「特殊なリテラル」の項を 参照すること。 ヒアドキュメントのデリミタを print <<die; dieなんてしないよ die ってしたら混乱するでしょ。それと同じレベルで特殊リテラルの 記載に類似(もしくはそのまま)させて使ったら、あかんでしょ。 print <<__END__; dieなんてしないよ __END__ って主旨? 絶対にありえない単語を区切りにしないと、区切りとしての役目にならんだろが __END__を区切りにしてしまったら、__END__という単語が使えなくなるだろ じゃあ __HOGE__ にするわ。絶対ありえん単語だし。 >>368 実行してみろよ、動くぞ。 use strict ; use warnings ; while(<DATA>){ print ; } print <<__DATA__; これがヒア __DATA__ __DATA__ 特殊リテラル ID.パス付きのHPの更新通知プログラムをつくり実行したところ (certificate verify failed)とハマりました。 おそらくSSL関係でつまっています。 簡単に教えてくれる方お願いします。 $mech->get('https://*****' ); ↑指摘されたラインです SSLかと思うのですが、SSLについて知識があまりないため、 ダメだった理由をわかりやすく教えていただけませんか? あと、ユーザーIDやパスワードの前にpitgetを書いてあると どうなるのでしょうか? 説明下手でごめんなさい。 特定のディレクトリ(test)からファイルを読み込む処理を 実装しようと思っています。 while(<./test/*>){ #〜ファイル読み込み処理 } はOKなのに $hoge = "./test/*"; while(<$hoge>){ #〜ファイル読み込み処理 } がうまくいかない理由はなぜなのでしょうか? $hogeを可変にしたいのですがどうすればよいでしょうか? 突然の質問で申し訳ありませんが、宜しくお願いします。 $hoge = "./test/*"; これは文字だからです。(演算子に対するアドレス(ポインタ)ではありません)。 $hoge = "test"; while(<./$hoge/*>) >>373 出来ました!ありがとうございます 今日かなり悩んでいました おかげ様でスッキリしました 下のようにリストのリストを作成したいがcpanか何かで実現できないでしょうか? > (list (list 1 2) (list 3 4)) ((1 2) (3 4)) > (first (list (list 1 2) (list 3 4))) (1 2) > (second (list (list 1 2) (list 3 4))) (3 4) my @car = (1, 2); my @cdr = (3, 4); my @both = (@car, @cdr); print "\@car is @car\n"; # -> @car is 1 2 print "\@cdr is @cdr\n"; # -> @cdr is 3 4 print "\@both is @both\n";# -> @both is 1 2 3 4 printf "%s\n" , $both[0]; # -> 1 printf "%s\n" , $both[1]; # -> 2 printf "%s\n" , $both[2]; # -> 3 printf "%s\n" , $both[3]; # -> 4 Lisper な人? 多分、こういうことをお望みかな。 #!/usr/bin/perl use Data::Dumper; my @car = (1, 2); my @cdr = (3, 4); my @both = ( \@car, \@cdr); print( Dumper( \@both)); ごめん、アクセス方法も書かなきゃね。 #!/usr/bin/perl my @car = (1, 2); my @cdr = (3, 4); my @both = ( \@car, \@cdr); print("$both[0]->[0]\n"); print("$both[0]->[1]\n"); print("$both[1]->[0]\n"); print("$both[1]->[1]\n"); >>377 ありがとう perlのリファレンス表記がこの機会に少し分かりました my @car = (1, 2); my @cdr = (3, 4); my @both = ( \@car, \@cdr); print("$both[0]->[0]\n"); print("$both[0]->[1]\n"); print("$both[1]->[0]\n"); print("$both[1]->[1]\n"); print("@{$both[0]}\n"); print("@{$both[1]}\n"); 971 名前:名無しさん@七周年[] 投稿日:2006/11/11(土) 00:56:10 ID:M8+ahUZV0 自称スーパープログラマー某 強烈加齢臭 メール見ない メール無視 ドキュメント見ない ドキュメント無視 説明聞かない 説明無視 話聞かない 話無視 ガム→むっちゃー むっちゃー むっちゃー むっちゃー 煎餅→バリバリバリバリバリバリ 菓子パン→モグモグモグモグモグモグモグモグモグモグ カップアイス→むっちゃー むっちゃー ペロペロペロペロ フロアすべてに響き渡る 超ばかでかいくしゃみ 当然手でおさえない 異音と異振動 ドスーン!ドスーン! ドカーン!ドカーン! バコーン!バコーン! ズドン!ズドン! 机が近いとマウスポインターが飛ぶ 誤操作誘発 書類だしたりしまうだけでドカンドカン 30秒ごとに口と鼻から異音 ふんっっ! ふんっっ! 備品破壊 貸与P C 破壊 他人のもの破壊 奴の作ったスクリプトとプログラムは使えない バグ製造機 電話や共有携帯電話 キーボードが油ベタベタ 奴に電話とPCとコンソールは触らせてはいけない HTMLファイルの特定文字列を大文字から小文字へ置き換えたいです。 具体的には、name= あれ、途切れちゃったのでダブルクォートでおかしくなったので、無しで書きます。 HTMLファイルの特定文字列を大文字から小文字へ置き換えたいです。 具体的には、name=A10AB を name=a10ab とnameの部分のみ置き換えたいです。 s{ name=" ([^"]+) " }{ 'name="' . lc($1) . '"' }egx >>382 eで関数を使えるんですね。ありがとうございました。 perl コマンドラインからモジュールを読み込みたいんですが、 perl -mM Win32::Clipboard -e "" だと Can't open perl script "Win32::Clipboard": Invalid argument と怒られます。 Perl64\lib\Win32\Clipboard.pm は存在しているのですが・・・ なんで -m と -M 重ねてるの?それと隙間開けずにやってみ -MWin32::Clipboard ↑ perl -mM Win32::Clipboard だと M.pm を読み込んだ後 Win32::Clipboard という名のファイルをperlスクリプトとして実行しようとしてるっぽい >>385 できました。 ありがとうございました。 どうでもいいけど、質問の回答に「なんで○○なの」と質問で返すのはみっともない わからないから質問してるのにね ここは初心者スレだし よっぽど回答に自信が無いように見える なんで? なんで? なんで? ことあるごとに、「なんで」っていうヤツ バカっぽい イライラする ムカツク >>389 「なんで」を追求する楽しさがわからないの? 質問を質問でかえすやついるよな 俺「なぜ変更したんですか?」 先輩「なぜ、その変更に疑問を抱くの?」 ・・・ 文脈にもよるわな マニュアルにはっきり書いてあるようなことと違うことやっているなら「お前ちゃんと読んでないのか?」ってなるし どう説明したら理解できるのか探るためにどう考えてどこに疑問を持ったのか確認することもあるし そういう文脈を無視して 質問したら質問が返ってきた = おかしい は短絡的だね >>392 めんどくさい人って思われてるよw 誰もあんなに聞きにこなくね? perlの本を読んでいると、よく 「スカラーコンテキストでは〜」とか「リストコンテキストでは〜」とありますが どのようなところで、分かるのでしょうか? $a = grep /d/ ,qw<ab cd def>; なんかgrepがスカラーコンテキストで使われていると思うんですが if(grep /d/ ,qw<ab cd def>){} だとなぜスカラーコンテキストだと分かるのでしょうか? shiftjisのファイルを読み込むと「{」が「本」にマッチしちゃうんですがいい方法ありませんか? ファイルを読み込むときにperlに文字コードを教えてあげるとバイト単位ではなくて文字単位で認識してもらえるようになる open my $fh, '<:encoding(cp932)', $file or die $!; 正規表現を含むソースコード全体をUTF8で書き、スコープの上の方で use utf8; と宣言すればスコープ内のコードも文字単位で認識されるようになる >>399 レスありがとうございます。 試してみます。 取り急ぎお礼まで。 以下エラーが出たため、ググると、似たエラーのQ and Aがありました。 Q and A では "if(defined(%hash))"を"if(%hash)"にしろと読めたので、倣うと確かにエラーは解消されました。 理屈はまるで分からないのですが、%記号のついた変数のときだけdefinedを削る理由は何なのでしょうか。 エラー: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at ./w3mhelp.cgi line 51. Q and A: https://github.com/bioconda/bioconda-recipes/issues/1254 >>401 すごく古い Perl (例えば 5.005_03) だと、defined %hash はエラーにならず 0 か 1 が返ってきていた。 だが今やこの機能は廃止された。 http://perldoc.jp/func/defined > 集合(ハッシュや配列)への defined の使用は非推奨です。 > これはその集合にメモリが割り当てられたかを報告するのに用いられていました。 > この振る舞いは将来のバージョンの Perl では消滅するかもしれません。 ハッシュ変数自体をスカラーコンテキストで評価すると「利用バケット数/確保バケット数」のような値が 返ってきて、これは昔から変わらない。内容が完全に未定義 = キーが一つも無ければ 0 が返される。 よって if (%hash) { ... } は、意味や挙動的には if (keys %hash) { ... } と同じ。 my %hash; printf "%s, %d\n", scalar %hash, scalar keys %hash; # 0, 0 $hash{udnef} = undef; printf "%s, %d\n", scalar %hash, scalar keys %hash; # 1/8, 1 %hash = (); printf "%s, %d\n", scalar %hash, scalar keys %hash; # 0, 0 http://d.hatena.ne.jp/yumatsumo/20071207/1197002522 ttps://perldoc.jp/docs/perl/5.22.0/perl5220delta.pod#defined40-64array41-32and32defined40-37hash41-32are32now32fatal32errors >defined(@array) と defined(%hash) は致命的エラーになりました >これは v5.6.1 から廃止予定で、v5.16 から廃止予定警告が出力されていました。 v5.6.1は2001年、v5.16は2012年、実際に廃止されたv5.22は2015年にリリース ttps://www.effectiveperlprogramming.com/2016/06/perl-v5-26-new-features/ >A hash is scalar context will return the number of keys, not the hash statistics. 今年リリース予定のv5.26からはスカラーコンテキストのハッシュが返す値はハッシュの持つキーの数になるそうです Perl初心者です。独学でやり始めましたが、わからないことがあり、先輩方、何卒よろしくお願いします。 my $num = 1; my $inc = $num++; print “$num¥n”; print “$inc¥n”; 変数$numは2と表示されますが、変数$incは1と表示さます。こらは仕様でしょうか。変数$incについても2が表示されると思ってたのですが。 C言語では右辺を評価した後に左辺に代入して、2が表示してたかな、と思ったので質問させていただきます。 >>404 Cでも++演算子は同様の結果になると思ったが? >>405 本当ですね。もっと確認してから質問するべきでした。 やりたかったことは $inc = ++$num( でした。C言語と同じですね。 ご教授頂きまして、どうもありがとうございました。 >>406 $inc = ++$num; の間違いです。 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 WVNXN perlやってみたいど素人です。 Ubuntu 18.04がメインのマシンです Windows XPサポート終了後難民となり Ubuntu 16.04に辿りついてます Ubuntuもまだまだど素人ですけど 通常に動かす所まではできます Perlはどこから?始めたらいいでしょう 本買った方がいいのかな? perlやってみたいど素人です。 Ubuntu 18.04がメインのマシンです Windows XPサポート終了後難民となり Ubuntu 16.04に辿りついてます Ubuntuもまだまだど素人ですけど 通常に動かす所まではできます Perlはどこから?始めたらいいでしょう 本買った方がいいのかな? どのみち本は買った方がいいと思うけど 初心者から始めるならこんなのもあるみたいよ(宣伝乙) http://www.perl-entrance.org/ perlに初心者がつくとは。。perlの未来は明るい Perl 6の“Neko operator”を使ってみたいのですがどのように使用すればいいでしょうか。 > 0 ^..^ 9 > say "0 ^..^ 9" などとやっても 0 ^..^ 9 という文字列(?)が返ってくるだけなのですが……。 Perl6は初心者なので全く分からない。 というかやろうとしたことすらないので知識ゼロw >>414 すいませんどなたかこれ分かりませんか。 >>417 perl6はまったく使ったことはないが、 範囲演算子らしいから perl5の ... と同じように使うんじゃないのかね。 say $_ for 0 ^..^ 10; みたいな? perl6の文法的にこれでいいかはわからんけど。 perl5の範囲演算子 ... じゃなくて .. だったね。失礼。 Xorgってperlで描かれてるコマンドが多い気がするけどなんで? なんだろう? 計算式で質問投稿しようとするとNGワードエラーで拒否られてしまう orz 全角でもダメかー >428 の書き込みで、本来続きだった リンク先 >422 の 16進〜解説お願いできませんでしょうか? の文章内だけでもNG含んでるとか・・・・プログラム技術板・・コミュニケーション終わってね? >>428 よくわからないんだけど、下2桁を60で割って3桁目より上は1の位にシフトしているわけだよね。 とするとあり得るのは時間の時と分について 時 * 100 + 分 とやった結果が数値として入っていて、 それの時間単位への変換ではないか? 例えば元の値が 315 なら3時間15分という意味で、それを時間単位に直すと 3.25 時間ってこと。 時と分とは限らないか。分と秒かも知れない。まあしかし下2桁は60進法で考えなければいけないということに変わりはない。 >>428 ところで元のプログラムに「16進バイナリデータを・・・」というコメントが入っているのだろうが、呼び出す側は実際には何を渡している? 仮に元がバイナリだったとしても unpack('N', ...) のようなことをしていない? だとするとそこでバイナリから Perl の 変数への変換自体は終わっている。 つまり、コメントが紛らわしい表現になっているだけ。 >430-432 スミマセンです。 orz もっと詳しく書こうとするとマンゴースレでもブロックされました。 ぶっちゃけ、この中の ttp://motor.geocities.jp/resermail/dc10tools.zip 「dc10mov2csv.pl」内です。 gps_data{'latitude'}の部分からです gps_data{'bearing'}の式は 変換が単精度浮動小数点数(float)のIEEE754 単精度float変換で合ってますか? これをベースに別メーカー機種の同様な構造を持つデータでの他言語の変換プログラムを考えているので。 >>433 pack, unpack の f は機種依存なので IEEE 754 単制度になるかどうかはプログラムからだけではわからない。 http://perldoc.jp/func/pack まあでも今時の普通のPC用Perlならなってそうな気がするけどね。 latitude って緯度か。GPSデータのバイナリをPerlの変数に入れているということだな。 だから下2桁を60進法で考える必要があると。 やはりそのプログラムのコメントは紛らわしいってだけだよ(サブルーチン名も紛らわしいが)。 bin_convert 呼ぶときには既にバイナリから float に unpack されてるから。 で、bin_convert 内でやっているのは先に書いた通り下2桁を60進法で小数点以下の値にしてるってことね。 >>434 ありがとうございます。 全体からずらして抜いたもの60進法にしてるだけなんですね。 てっきりバイナリから浮動小数点を出す特殊計算かと思っていました。 適当にがんばります。 「サンプル」のCSVを文末の「結果」に変換するプログラムをPerlで作りたいです。 ● サンプルのCSVの構造: 1コラム目:数字8桁の昇順、2コラム目:数字1桁、3コラム目:文字列 ● 作りたいプログラム: 1コラム目、3コラム目は保持する。複数レコードで1コラム目に重複があれば、 それらの複数レコードの2コラム目の1桁数字を連番にする。 1コラム目に重複がない場合は、当該レコードの2コラム目を1にする。 ● 「サンプル」 06030002,6,文字列A 06030004,3,文字列B 06030004,4,文字列C 06030004,5,文字列D 06030005,3,文字列E 06030005,4,文字列F 06030006,3,文字列G 06030006,4,文字列H 06030006,7,文字列I 06030007,3,文字列J 06030008,3,文字列K ● 「結果」 06030002,1,文字列A 06030004,1,文字列B 06030004,2,文字列C 06030004,3,文字列D 06030005,1,文字列E 06030005,2,文字列F 06030006,1,文字列G 06030006,2,文字列H 06030006,3,文字列I 06030007,1,文字列J 06030008,1,文字列K まずは自分で書いてみたコードを晒すところからだな。 一行プログラムが思い浮かんだ。 最初の列をハッシュのキーにして3列目をpush。 全部読んだらキーをソートして読んだ内容に番号降りつつ出力。 しかし俺は今電車の中からスマホで書いてるのでここに書く気が起きない。 Ruby で作った require 'csv' count = Hash.new( 0 ) # 初期値は、0 # コロン区切りのCSV 入力ファイルを、1行ずつ処理する CSV.foreach( "input.csv" ) do |row| count[ row[ 0 ] ] += 1 row[ 1 ] = count[ row[ 0 ] ] puts row.join( "," ) end 考え方は >>439 と同じ perl -pe "s/^([^,]+,)[^,]+/$1.++$count{$1}/e" < sample.csv my @y = ""; while(<>) { my @x = split ","; # $x[1] = $x[0] eq $y[0] && ++$y[1] || 1; $x[1] = $x[0] ne $y[0] || ++$y[1]; print join ",", (@y = @x); } ウチでやるならこうかしら おはよう。 元のテキストが s.txt に入っているとして、こうする。 perl -ne 'chomp;@d=split/,/;push(@{$h{$d[0]}},$d[2]);END{for(sort keys%h){for($i=0;$i<@{$h{$_}};$i++){print join(",",$_,$i+1,$h{$_}[$i])."\n"}}}' s.txt なげーなw あ、そうか。貯め込む必要はなくてハッシュ作ってそのまんま出せば良いんだよな。 じゃあawkの方が楽ではないか? awk -F, 'BEGIN{OFS=","}{n[$1]++;print $1,n[$1],$3}' s.txt 436です。皆様ありがとうございました。 自分では1行ずつ処理することまでしかできず、複数レコードの 1コラム目の比較をすることができませんでした。 おかげさまで体育の日に子供の運動会に行けます! ありがとうございました! 上の方のレスにも関連したものがありますが、 ファイルから読み込んだ文字列データにて パターンマッチがヒットしません。 同一文字列を直接コード内に定義すると、ヒットします。 出来ればファイルに切り出したいので、 ご教示いただけますでしょうか。 [環境] Activeperl win8.1 or 2016 server perl -v This is perl 5, version 24, subversion 3 (v5.24.3) built for MSWin32-x64-multi-thread [コード utf-8で作成] #res[1]にはcp932のコードの「テスト」を含む文字列が格納されている。 $res[1] = Encode::decode('cp932', $res[1]); #patern.txtはutf-8で「テスト」の文字列が格納されている。 open (FILE, "<:utf8", "patern.txt") or (die "$!"); my $line = <FILE>; close(FILE); #$line = 'テスト';←#を外して直接コードに書くとヒットする。 print encode('cp932', $line);(正常に取得できている。) if ($res[1] =~ /$line/){ print "Hit!"; } else{ print "not Hit"; } ---出力--- >テスト >not Hit たぶんそれだな。$line の中身が "テスト\r\n" または "テスト\n" になってそう。 遅くなりすみません。 テストファイルには改行を入れていなかったのですが、 chompが必要なのですね。 ファイルからレコードを取得するにはchompが必要と勉強になりました。 ありがとうございました。 >>450 いや、改行は入っていると思うぞ。でなければあのプログラムでは一致する。 ところでUTF-8にBOMってなんか意味あるの? ビッグエンディアンで上のビットから詰め込んで並べている1パターンしかないよね? >>453 あるよ、BOMがあればUTF-8だと文字コードを 簡単に判定できる つまり、文字化け防止に役立つ みんなBOM付けるようにすれば良かったんだけどな >>450 ですが、改行が入っていました。 遅くなりすみません。 すみませんでした。確認をしっかりします。 もう一つ質問があるのですが、>>450 の環境にて、パターンマッチングを、全角、半角、ひらがな、カタカナ、大文字、小文字を区別することなく行いたいのですが、方法をご教示いただけますでしょうか。 >>456 手順としてはまず比較に都合のいいように比較する側とされる側の文字列を正規化する。 例えば半角は全て全角にし、濁点や半濁点はそれを含んだ文字にし、英小文字は大文字にする。 それから比較を行う。 ただし使われている文字がASCIIの文字だけならば // のオプションで i が使えるので正規化不要。 教えて下さい。 my @str4=['a','b','c','d','e']; my $ref4=\@str4; print $str4[0][1],"\n"; # b print @{ $str4[0] },"\n"; # abcde ref4を使って同様に b と abcde を表示するには、どうしたらいいですか? うっかり自己解決しました。数時間悩んだのに。 print @{ ${ $ref4 }[0] }; print @{ ${ $ref4 }[0] }[1]; >>457 オプションで可能であればと思ったのですが、マッチング文字列と対象を同じ文字種にしないといけないんですね。 ActivePerlでUnicode::Japanese でUTF8から変換して書いてみたのですが、cp932にencodeすると、化けてしまい、使用できませんでした。 ActivePerlで使用可能なモジュールあればコードではなくてかまいませんので、何かあれば紹介してもらえますでしょうか。 UNICODEにはcomposed、decomposedというややこしいものもあるんだよね。 https://pointoht.ti-da.net/e8205606.html Unicode::Normalizeってのがあるけど、日本語を特別扱いしてくれたりはしなさそうな予感。 >>453-455 Linux では、BOM なしUTF-8 を使う、アプリ開発者が多く、 BOMありにするとバグるアプリがあるから、BOMなしを使っているけど、 そうすると、Windows では、sjis と区別がつかなくなり、 Explorer での文字列検索ができなくなる だから、Windows10 で、WSL, Ubuntu を導入して、grep を使っている 結合文字列をUnicode正規化で合成する方法の危険性 https://qiita.com/monokano/items/d4c37d9bc9833eaeda6e 濁点・半濁点を別の1文字として扱う、結合文字列はMac だけだから、Mac を使わないなら関係ない Unicode正規化は、日中韓で、別の漢字に変換されるものがあるから使えない Ruby では、sjis・UTF-8 の変換は、ファイル読み書き時に指定できる。 CRLF・LF の改行コードの違いは、意識したことがない。 chomp とか、どちらの改行コードでも、正常に動く 【 nkf 】コマンド――文字コードと改行コードを変換する http://www.atmarkit.co.jp/ait/articles/1609/29/news016.html これで全角・半角の変換もできる Perl にも、モジュールもあるのでは? >>464 有料ですがnkfのActivePerl用をnamazuというところから購入しましたが、 nkfで変換後、utf8でマッチングが不可能で調査中です。 ハッシュを要素に持つハッシュへのアクセスについて ご教示いただけますでしょうか。 下記のコードで、読込は正常に完了しますが、出力が不可能です。 $$を使用したり、試しましたがギブアップです。 #hash.txtの中身(タブ区切り) #1 10 テスト1 #2 5 テスト2 use Encode; use utf8; my %table; my %rec; open (FILE, "<:utf8", "hash.txt") or (die "$!"); while(my $line = <FILE>){ chomp($line); @d = split(/\t/, $line); %rec = ('id' => $d[0], 'count' => $d[1], 'name' => $d[2]); $table{$d[0]} = \%rec; print encode('cp932', $table{$d[0]}{'id'})."\t". encode('cp932', $table{$d[0]}{'count'})."\t".encode('cp932', $table{$d[0]}{'name'})."\n"; } close(FILE); print Encode::encode('cp932', "読込完了\n"); foreach my $row (@$wrote_num){ #出力不可能 print encode('cp932', $row{'id'})."\t". encode('cp932', $row{'count'})."\t".encode('cp932', $row{'name'})."\n"; } print Encode::encode('cp932', "$出力完了\n"); wrote_numが何か分からんけど my %rec; はwhile内にしたらどうですか あと、$rowはハッシュのリファレンスだろうから$row->{'id'}では >>467 すみません、レス用に書き換えた元がwote_numでした 下記の様に変えましたが、アクセスできません。 意外と難しいですね。 use Encode; use utf8; my %table; open (FILE, "<:utf8", "hash.txt") or (die "$!"); while(my $line = <FILE>){ chomp($line); @d = split(/\t/, $line); my %rec = ('id' => $d[0], 'count' => $d[1], 'name' => $d[2]); $table{$d[0]} = \%rec; print encode('cp932', $table{$d[0]}{'id'})."\t". encode('cp932', $table{$d[0]}{'count'})."\t".encode('cp932', $table{$d[0]}{'name'})."\n"; } close(FILE); print Encode::encode('cp932', "読込完了\n"); foreach my $row (@$table){ print encode('cp932', $row->{'id'})."\t". encode('cp932', $row->{'count'})."\t".encode('cp932', $row->{'name'})."\n"; } print Encode::encode('cp932', "$出力完了\n"); 実行結果:まだアクセスできません >hash_test.pl 1 10 テスト1 2 5 テスト2 読込完了 出力完了 これでいけると思いましたが、玉砕でしたw foreach my $row (@$table){ while (my ($id, $count, $name) = each(%row)){ print encode('cp932', "$id\t$count\t$name\n"); } これでいけました! foreach my $row (keys %table){ print encode('cp932', "$table{$row}{'id'}\t$table{$row}{'count'}\t$table{$row}{'name'}\n"); } >hash_test.pl 1 10 テスト1 2 5 テスト2 読込完了 1 10 テスト1 2 5 テスト2 出力完了 ただ、key を外して foreach my $row (%table)とすると下記の通り改行が入ります 1 10 テスト1 2 5 テスト2 出力完了 これで全てのハッシュ要素を出力できますが、 カラム順が不確定になってしまいますね。 ハッシュなので仕方ないことですかね。 foreach $row (sort keys %table) { foreach $col (sort keys %{$table{$row}}) { print encode('cp932', "$table{$row}{$col}\t"); } print "\n"; } >hash_test.pl 1 10 テスト1 2 5 テスト2 読込完了 5 2 テスト2 10 1 テスト1 出力完了 >>471 キーだけ別の配列に取っといてそれ使えば? >>472 できれば要素をカラム名でアクセスしたいのでハッシュの方がいいのですが、カラム順固定出力は配列しかないということですね。 >>471 foreach $col (sort keys %{$table{$row}}) { を foreach $col (qw/id count name/) { とかでは? keyの名前も順番も分かってるんだし。 自分が昔質問したことにたいして今なら回答できる <> は <STDIN> の単なる略ではなく @ARGV が捕れない副作用があった そこに詰まっていた #!/usr/bin/env perl use 5.010; if (-p STDIN) { print "May be pipe is used. I've got STDIN as below\n"; # my @lines = <STDIN>; # when <> used, perl think no @ARGV map {state $i; ++$i;print "$i $_" } <STDIN>; } else { print "This may be just single running.\n"; } map {state $i; ++$i; print "$i argment found ==> $_\n"} @ARGV; タグを除去したいのですが、<>も文に入っているため <.*?>ではなく<("[^"]*"|'[^']*'|[^'">])*>を使いたいのですが perl -pe '<("[^"]*"|'[^']*'|[^'">])*>' にする場合どれどれをエスケープすればよいでしょうか? ’だけだと動きませんでした。 perl -pe '<("[^"]*"|\'[^\']*\'|[^'">])*>' 除去?だったらs/パターン//gみたいにやらないと何も変わらないのでは? てか、それエラーにならないの? 5chの書き込みのほう、つけ忘れてました perl -pe 's/<("[^"]*"|'[^']*'|[^'">])*>//g' です perl -pe 's/<.*?>//g'は動くんですけど perl -pe '<("[^"]*"|\'[^\']*\'|[^'">])*>'だと動かないんですよね またやっちゃった perl -pe 's/<("[^"]*"|\'[^\']*\'|[^'">])*>//g' こうか? perl -pe 's/<("[^"]*"|'"'"'[^'"'"']*'"'"'|[^'"'"'">])*>//g' perlというよりシェルのシングルクォートの問題 そこまでするくらいなら HTML::Parser を使う方がいいと思うよ。 >481 できました!、ありがとうございます。 'を'""'で括るのですね なんで\でエスケープにならないんでしょうね パーサーも一度使ってみたんですが <p>hoge</p><p>hoge</p> pタグが一行に2つあると誤作動したりするんですよね その誤作動がパーサーのせいかどうかは判らないが、少なくとも HTML::Parser でそんなことは起こらないから安心してほしい。 たとえばテキスト部分だけを出力したいならこんな感じでできる。 my $parser = HTML::Parser->new( text_h => [sub { print( $_[0]) },'text'], ); $parser->parse_file( \*STDIN); >485 参考になります。 パーサーもいろいろ種類あるみたいですね。 自分の使ってたのはhtml-xml-utilsというやつでした。 @aに0を100ケ追加するには、pushをforで100回回す以外の方法ありますか >>488 ありがとうございました 俺が遅くなりまして申し訳ありません 二つ以上の空白文字列を 一つの空白に変えたいのですが うまくいきません。 if($line=~/\s\s+/){ $line=~s/\s\s+/\s/g print("$line\n") } s/\s\s+/ /g; でうまくいったよ。 そうか、\sって正規表現だから、置換文字列に使うと「perl にそんな定義ないで!」ってなるのか。 これは俺も気を付けよう。 置換といえばこのまえ、JSONで取得したUnicodeを表示したくて、 \u3042 → \N{U+3042} に置換しようとしたけど、できなかった。 \N{U+ }←ここにはリテラルしか書けないのかな。 if文で真偽値を判定するのってどうやるの? hoge() or die("Error\n"); ってなってた(hoge()の戻り値が魏ならエラー)のを標準出力したくて my $a = hoge(); if( ! $a ){ print("Error\n"); exit $!; } みたいにしたんだけど、if文の書き方ってこんなんで良いの? >>494 0を返しても、0といb、文字(アスキーコード0x30)として扱われたりするから、俺は if(scalar($a)) { とか if($a eq 0) { とかするよ。 >>494 良い。 ! で条件反転させるんだったら unless 使っても良いと思うけどね。 unless ($a) { ... } みたいに。 良くないんだってば。 Perlをそういう流儀でやってるといつか痛い目にあうよ。 >>495 マジか。 my $a = hoge(); において、左辺が 0、右辺が 0x30 になるのは、言語としてぶっ壊れているんじゃね? そういう言語なの 0 but true なんていう値もあるし 元の hoge() or die("Error\n"); が問題なく動いてるなら hoge() or print("Error\n"), die $!; hoge()が0を返しうるかどうかもわからんと思うのだが >元の >hoge() or die("Error\n"); >が問題なく動いてるなら という前提の下で >>495 の配慮に意味があるの? >>496 で十分 hoge() or が動くという前提を無視するとして もしもhoge()が0を含む数値か失敗を返すなら(空文字を含む文字列か失敗でもいい) 失敗にundefを返してdefinedで受けるのがフツー $_ ← これ、なんて読む? perlが発祥ってわけでもないそうだが(bashとかにもあるんだってね)、ガチのドザなので 俺は内心ドルバーって呼んでる ドル・アンダーバーじゃないかな。 設定によってはチルダの代わりにトップバーってのがあったから、それと区別するのにアンダーって言ってた気がする。 おつあり そういやそんなの(トップバー)あったねえ なるほど なつかしのcgiゲームを設置したくてperlを触ってるのですが、今の時代でもcgiゲームはサーバーへの負荷は大きいのでしょうか?(昔はよくゲームの設置が禁止されてましたが) perlと関係なかったらすみません… StrawberryPerlで $str='あ'; if ($str =~ /^[あいう]$/) {print("match\n");} を実行してみるとマッチしてくれません /^(あ|い|う)$/ ならマッチするのですが 古いPerl4のjperlなら /^[あいう]$/ でもマッチします やはりこれはStrawberryPerlのバグ(または仕様)なのでしょうか print length $str; を入れてみたらわかる >>511 レスどうもです Shift-JISの環境で正しく2とカウントされてます 前記はあくまで例ですので全角文字なら他の文字でもこうなるみたいで ひらがなにマッチさせたいわけではないんです 少なくともperl5.8以降の文字クラスはuse utf8;前提になっててlengthが1じゃないとだめじゃね? 推奨されてないけど use encoding 'sjis' ならsjisでコード書けたと思う jperlナツカシス Windows では Filter::Encoding いれて使ってた スクリプトは utf-8 で書いて use utf8 してたけど コマンドラインでは -MFilter::Encoding=cp932 とか read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる