トップページ⇒php
1001コメント316KB

Perlコーディング初心者質問スレ Part 47

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/03/01(水) 15:39:31ID:???
Perlのコーディングで困ってる人のスレです。 

【投稿する際の注意】 
質問するときは内容をよく吟味してから投稿してください。 
「コマンドの意味がわかんない」とかはマニュアル見ましょう。 
回答者さんは何でも屋じゃありません。 

1: 自分はこういう事がしたい。 
2: それでこんな風にやってみたが・・・ 
3: こんなエラーが出て上手く行かなかった。 

最低でも1と3が無いと誰も答えられないよ。 
ソース貼る時は、全角スペースでインデント忘れずに。 
良い回答は良い質問から。一緒に勉強しましょう。 

過去ログやお勧めサイトは >>2-10 
0175nobodyさん2006/03/11(土) 17:14:12ID:???
あと必要最低限の英単語も覚えた方がいいと思う
酷すぎる
0176nobodyさん2006/03/11(土) 18:40:51ID:???
ABCDEFGH
となっている文字列を
AB,CD,EF,GH
という風に二文字ずつでリストに展開するにはどうすればよいですか?
元の文字列は必ず偶数個です。
0177nobodyさん2006/03/11(土) 18:53:04ID:???
$str = "ABCDEFG";
print join( ' | ' , split( /(..)/, $str ) );
とかしてみたんですが、結果が
| AB | | CD | | EF
となって変な感じです。
AB | CD | EF
となってほしいのですがうまくいきません。
0178nobodyさん2006/03/11(土) 18:54:15ID:???
>>176-177
my $str = 'ABCDEFGH';
print join(',', $str =~ /../g), "\n";
print join(',', unpack '(A2)*', $str), "\n";
0179nobodyさん2006/03/11(土) 19:00:40ID:???
うお、早い。
unpackでできました。
(A2)*なんてできたとは知りませんでした。
どうもありがとうございます。
01801722006/03/11(土) 19:22:03ID:???
>>173>>174>>175さん ありがとうございます

本当なんもわからないのですみませんです・・
見よう見まねで他のファイルと比べてみて適当にいじってしまいました。
少しネットで調べてみたのですが、初歩的なことがわかっていないため何がなになのかわからない状態です・・

>>173さん
sjisを使ってます。一例にあげてくださった文字や、文字列中にはlは使ってません
調べてみても良くわからなかったのですが、
文字化けする文字の後ろに「\」をつけたり「'」で文字列を挟んで対処するような?ことが載っていて
「'」で文字列を挟むことは試してみましたが駄目でした
あんま適当にいじっても良くないかな?試してません・・

レスを参考に少し勉強してみます・・
レスありがとうございましたm(_ _)m
0181nobodyさん2006/03/11(土) 20:02:53ID:???
じゃあスクリプトをeucにするだけで解決する問題だろうね。
0182nobodyさん2006/03/11(土) 20:05:52ID:???
>>180
エスケープの意味とやり方は覚えておかないと全く先に進めないと思う。
0183nobodyさん2006/03/12(日) 01:25:09ID:???
なんかよくわからんけど、適当な法律でも作って、
MVC な cgi 以外配布禁止にしたらどうだろう。
0184nobodyさん2006/03/12(日) 02:24:37ID:???
とりあえず鯖管にでもなって、use strictがないのは全部削除でw
0185nobodyさん2006/03/12(日) 03:08:46ID:???
EUC-JP、UTF-8、Unicode以外のファイルも、テキストだろうがなんだろうがデリだな
0186nobodyさん2006/03/12(日) 05:59:43ID:???
>>184
それだ!!
01871722006/03/12(日) 09:02:35ID:???
>>181>>182さん
昨日見た専門のサイトは、難しいことばかりで
何がなんだかさっぱりでした
皆様の助言は初心者の私でもわかりやすく
検索しやすくとても参考になります。

本当、ありがとうございました
0188nobodyさん2006/03/12(日) 10:16:50ID:???
> 昨日見た専門のサイトは、難しいことばかりで

どこですか?
0189nobodyさん2006/03/12(日) 22:15:07ID:???
\xA1[\xBC\xBD]
で「ー」と「−」を引っ掛けようと思っていたのですが、
なぜだか「−」のみ引っかかりません。

すみませんがご教示いただけますと幸いです。
0190nobodyさん2006/03/12(日) 22:56:12ID:???
>>189
「−」は A1 DD じゃねーか?
0191nobodyさん2006/03/12(日) 22:59:51ID:???
>>188
perlメモというサイトさんだったと思います
0192nobodyさん2006/03/12(日) 23:01:28ID:???
[SHIFT_JIS]
「ー」\x81\x5B
「−」\x81\x7C

\x7Cは「|」

あとは調べられるよな
0193nobodyさん2006/03/12(日) 23:23:10ID:???
>>192
ネタ?
01941892006/03/12(日) 23:41:40ID:???
説明不足ですね。すみません。

文字コードはEUCです。

ttp://72.14.203.104/search?q=cache:rjjAEg1ykyIJ:www.susono.com/~sohei/memo/memo/perl_euc.html+&hl=ja&gl=jp&ct=clnk&cd=1&lr=lang_ja
ここを参考に書いていたのですが、引っかからなかったので
質問させていただきました。

皆さんご教示有難うございます。
これから色々試してみて報告させていただきます。

一つお聞きしたいことがあるのですが、例えば今回のように
「−」と入力して「\x**」というように変換してくれるようなサイト等
があればご教示いただきたい次第です。
度重なる質問ですみません。
01951902006/03/12(日) 23:50:59ID:???
>>194
なんかそのサイトの記述が違ってるような。

'(?:\xA1[\xBC\xBD\xC1])' → ー―〜
'(?:\xA1[\xBC\xDD\xC1])' → ー−〜

だと思われ。
(真ん中の文字が微妙に違う)

> 「−」と入力して「\x**」というように変換してくれるようなサイト等
俺は UNIX で hd コマンドを使ってるけど、 Windows とかサイトはわかんない。すまん。
0196nobodyさん2006/03/12(日) 23:51:39ID:???
> 「−」と入力して「\x**」というように変換してくれるようなサイト等

この程度のことを自分でやろうと思わないのなら、Perl のみならず、
あらゆるプログラム言語から手を引くべきだろうね。

また、仕事でやらされている状況なら、コンビニの店員のバイト、
もしくは、地面掘りの仕事に転職するべきかと。
0197nobodyさん2006/03/13(月) 00:02:18ID:???
>>194
print unpack "H*", "−";
と書いたファイルをeucで保存して実行するだけ。
俺は文字コード表使ってるが。

>>196
初心者スレに居ると身体に悪いぞ。
0198nobodyさん2006/03/13(月) 00:02:57ID:???
>>194
あるよ・・・俺の個人サイトに・・・
0199nobodyさん2006/03/13(月) 01:42:55ID:???
>>195、>>197
非常に参考になるアドバイス、誠に有難うございました。
後述しますが、おかげさまで変換プログラムで確認できる
ようになりました。
この場をお借りし御礼申し上げます。
文字コード表は後で探してみたいと思います。

>>196
おっしゃるとおりです。
返す言葉がございません。
反省点を踏まえ、プログラムを自分で作成してみました。


皆様の一つ一つのアドバイスを無駄にせぬよう、
自分でもできることをやってみました。
皆様には全く不必要のものかとは思いますが、今後私と
同じような問題を抱えた方がこのスレッドを見たときに少し
でも役に立てるよう、即席ではございますが変換プログラム
を作ってみました。晒しておきます。

ttp://whatever.say.jp/char_unpack.cgi
0200nobodyさん2006/03/13(月) 02:39:54ID:???
晒すってのは、ソースコードを晒すことだぽ。

http://b.hatena.ne.jp/entrylist?url=http://whatever.say.jp%2F
http://b.hatena.ne.jp/entrylist?url=http%3A%2F%2Fwhatever.say.jp%2F&sort=eid

なんか興味深いね。
0201nobodyさん2006/03/13(月) 07:53:39ID:???
>>199
お前・・・
0202nobodyさん2006/03/13(月) 09:08:48ID:???
ttp://whatever.say.jp/
って閉鎖されてるようだけど何のHP?
0203nobodyさん2006/03/13(月) 09:48:40ID:???
>>202
http://b.hatena.ne.jp/entry/http://whatever.say.jp/program.html
http://b.hatena.ne.jp/entry/http://whatever.say.jp/program/snap_shot/
http://whatever.say.jp/weblog/
0204nobodyさん2006/03/13(月) 11:11:11ID:???
発言からみると今まで文字コードなんて気にしなかったWindowsプログラマか
02051492006/03/14(火) 11:00:15ID:K408BhkZ
まいどです。>>149です。
前回どこよりもすばやく的確な解答を得ることができたので、またまた頼らせていただきます。

前回は「日付からスラッシュを抜きそれでソートする方法」等を教えていただいたのですが、それを別の場所でも利用しようと考えました。
データの自動非表示とでも言えばいいのかな?指定日になったら自動で一部データを非表示にするという物です。
考えとしては以下のような感じです。
1.表示非表示はチェックボックスで行う。チェックが入っていればその情報を表示という感じで。
もちろん、その変数は空白か1が入り、1ならcheckedとする。
2.CGIに良くありがちな日付取得より年月日を取得する。
3.掲載期限とシステム日付を比較し、「システム日付≧掲載期限」であれば表示チェックを空白にする
4.勝手に消えてくれてウマー
こんな感じです。
イベント情報掲載とか新譜発売情報なんかにも応用が利くんじゃないかと。
で、ない頭をフルに使って以下のようにやってみました。もちろんですが、元となるCGIや他のCGIから切り張りしたものです(;´∀`)
保存してある変数は、不必要だと思うものは消しちゃったので、上下でずれがあるかもしれませんが、脳内変換お願いします。

・・・
で、下にソース貼り付けたら文字数オーバーしたので、とりあえずここまで。
02061492006/03/14(火) 11:00:39ID:K408BhkZ
問題のソース・・・
----------------
sub check{
$cview2 = "";
&get_time;
open(IN,"$logfile") || &error("Open Error : $logfile");
@lines = <IN>;
close(IN);
  foreach $lines (@lines) {
  ($no,$year1,$month1,$day1,$name,$sub,$com,$cview,$climit〜〜) = split(/<>/,$lines);
  chomp;
  #日付チェック手順1 : 日付を変換
  if($climit){
    $climit2 = sprintf('%04d%02d%02d', split('/', $climit)) ;
    #日付チェック手順2 : 日付を比較
    if ($sysdate2 >= $climit2) {
     $_ = "$no<>$year1<>$month1<>$day1<>$name<>$sub<>$com<>$cview2<>$climit<>〜〜\n";
     print OUT $_;
    }#if閉じ
  }#if閉じ
  }#foreach閉じ
close(OUT);
}
----------------
しかし、変化無しです。「$cview」は1のままです。
ルーチンの実行はライブラリ読み込みの次ぐらいに行っているので、CGI実行で必ず動作するはずなのですが…

どこが間違っているのでしょうか?採点お願いします。
0207nobodyさん2006/03/14(火) 11:39:47ID:???
$sysdate2 >= $climit2
を
int($sysdate2) >= int($climit2)
にしたらどうなる?
02081492006/03/14(火) 11:48:44ID:K408BhkZ
すばやい返答ありがとうございます。

>int($sysdate2) >= int($climit2)
うーん。変化無しです。

というか、変化しているかどうかがまったくわかんないですよね。
どうにかして変数などがちゃんと反映されているかって確認できないですかね?
0209nobodyさん2006/03/14(火) 11:50:57ID:???
> 前回どこよりもすばやく的確な解答を得ることができたので、またまた頼らせていただきます。

仕事かよ。
0210nobodyさん2006/03/14(火) 11:52:11ID:???
> どこが間違っているのでしょうか?採点お願いします。

採点を求めているわけだから、採点してあげればいいんだよね。
正常に動作するコードは不要と。
0211nobodyさん2006/03/14(火) 11:53:18ID:???
> 4.勝手に消えてくれてウマー

藻前が勝手に消えてくれると(゚д゚)ウマー
0212nobodyさん2006/03/14(火) 12:11:21ID:???
> 前回どこよりもすばやく

マルチだったのかよ
0213nobodyさん2006/03/14(火) 12:41:09ID:???
もうこういうのはスルーしれ
02141492006/03/14(火) 14:29:16ID:K408BhkZ
もう春休み?
とりあえず、釣りかもしんないけど、マジで解答ほしいので、マジレスしてみる。

>>209
何ゆえその1行で仕事と判断?丁寧に記入するヤツはすべて仕事なの?
>>210
確かに、これはおかしい。ごめんね。採点じゃなくて、校正・訂正・指導、まぁ何でも良いけど、動くように教えてplz
>>211
あんたのような揚げ足取りが消えてくれた方が2chシステム的にはウマーだと思うが?
>>212
某Q&Aサイトで質問→解答なし。→質問削除→さらに別のQ&Aサイトで質問→有効回答なし。→質問終了→2chに書き込み→即日解答。しかもビンゴ!
どこがマルチよ?

厨房か工房かしらんが、言葉遣いもそれなりにあわせてみたよ。
0215nobodyさん2006/03/14(火) 14:39:37ID:???
>>214
つ はてな掲示板「いわし」
0216nobodyさん2006/03/14(火) 14:52:48ID:???
>>214
> 某Q&Aサイトで質問→解答なし。→質問削除→さらに別のQ&Aサイトで質問→有効回答なし。→質問終了→2chに書き込み→即日解答。しかもビンゴ!
どう見てもマルチです、本当に(ry
そういう場合は、ここで聞いたけど回答が無かったと、元の質問を示すのが慣例。
もしくは事前に断わるか。
0217nobodyさん2006/03/14(火) 14:58:34ID:???
>>216
その言い分を真に受けるとすると、前の質問が close してから質問してるみたいだし、
そゆのはマルチとは言わないんじゃね?
0218nobodyさん2006/03/14(火) 15:03:25ID:???
>>217
それなら「他のところで質問をしたけど答えが出なかった」だけでもいいから、
事前に断わるべきだろう。

答える奴だって人間だから、感じ悪いと思う奴だっているよ。
それぐらい、常識で判断してほしい。
0219nobodyさんNGNG
> chomp;

これ何か意味あんのか。
つーかYahoo掲示板でも行けよカス
0220nobodyさん2006/03/14(火) 15:20:39ID:???
>>218
事前に断りがあるかどうかは別にして、
>>212で
>> 前回どこよりもすばやく
>マルチだったのかよ
この1行でマルチと決め付ける必要性も無いと思うがな

>>212 =>>218
だった場合、オマエに常識を語る資格はそうないと思われ
0221nobodyさん2006/03/14(火) 15:27:37ID:???
>>220
違うけど。何勝手に決め付けてんの?
0222nobodyさん2006/03/14(火) 15:33:01ID:???
>>205
質問だけ書いとけばいいのに余計な一言書くから・・・
0223nobodyさんNGNG
この殺伐とした雰囲気最高だよな
馬鹿と馬鹿が煽り合ってんの
見てて楽しいからもっとやれよ
0224nobodyさん2006/03/14(火) 16:03:40ID:???
と、馬鹿が申しております。
0225nobodyさん2006/03/14(火) 16:14:10ID:???
>>222
そこを除いても殺意を覚えるのに十分な書き込み内容だと思うけどw

0226nobodyさん2006/03/14(火) 16:16:31ID:???
>>225
2行目まで読んだので知らなかった
0227nobodyさん2006/03/14(火) 16:47:10ID:???
こうして結局答えは出ないのでした。
0228nobodyさん2006/03/14(火) 16:54:23ID:???
後の曹操である
0229nobodyさん2006/03/14(火) 17:04:47ID:???
俺は >>205 が特に礼節を欠いているとも思わないし、
答えてあげたい気持ちは満々なのだが、
いかんせん質問の意味がさっぱりわからないので答えようがない。
0230 ◆TWARamEjuA NGNG
本7?
0231nobodyさん2006/03/14(火) 20:12:03ID:???
&autolink($comment)
こんな感じので、コメント中にURLが含まれる場合
そのURLへのリンクを作成して
表示される文字列はURLではなく
「外部リンク」とか任意の文字列にしたい場合はどのようにすれば良いのでしょうか?
0232nobodyさん2006/03/14(火) 20:28:50ID:???
sub autolink {} の中を晒して下さい。
0233nobodyさん2006/03/14(火) 20:48:54ID:???
autolink{}の中で =~ s/https?:\/\/〜/<a href="〜">$1</a>/gi みたくなってる部分があると思うが、
</a>直前の $1 とか $2 の部分を 外部リンク とでも書き換えてください
0234nobodyさん2006/03/14(火) 23:21:54ID:???
なるほど、本7の仕業だったのか。
あいかわらずのスキルなんでつね。w
0235nobodyさん2006/03/14(火) 23:26:28ID:???
本7って?
0236nobodyさん2006/03/14(火) 23:30:36ID:???
>>235
uPD9aFm9hI でぐぐれ。
0237nobodyさん2006/03/14(火) 23:31:05ID:???
色んな意味で有名になった人。
0238 ◆aiY4htt2.2 NGNG
(´-`).。oO(こっちのトリップで遊んでいたよなぁ。。。)
0239 ◆AnalSexRiQ 2006/03/15(水) 15:25:51ID:???
こっちじゃね
0240nobodyさん2006/03/19(日) 10:45:53ID:???
ちょっと質問。

$a = "あいうえおかきくけこ$x{'TEST'}たちつてとなにぬねの";
の場合と
$b = "あいうえおかきくけこ".$x{'TEST'}."たちつてとなにぬねの";
とか
$c = 'あいうえおかきくけこ'.$x{'TEST'}.'たちつてとなにぬねの';
って感じで連結するのはどれが一番お薦め?

連結をあまり好ましくないっぽい書き方してる書き込みを昔見た気がするので、
$aのやり方の方がいいのかなとも思ったけど、
負荷的にはなるべくシングルクォーテーション使ったほうがよさそうだしで、ちょっと迷ってまっす。
ひょっとしたら連結の方が負荷高かったりしたら元も子もないし・・・
0241nobodyさん2006/03/19(日) 11:08:41ID:???
そんな意味不明なことせず、MVC な構成にするのがオススメ。
0242nobodyさん2006/03/19(日) 11:31:18ID:???
>>240
適材適所です。
頑なに法則を守っていると可読性が落ちたりします。
速度を考えるなら、連結自体から見直せば良いかもしれません。
0243nobodyさん2006/03/19(日) 11:52:52ID:???
スピード重視と言うことなら、Perl なんか使わずに
strcat しまくるべきだな。
0244nobodyさん2006/03/19(日) 12:12:44ID:???
>>240
2番目と3番目は内部では全く同じコードとして実行される。
1番目との比較は、実装や環境に依存。
なので、自分の対象とする環境でベンチマークとりなされ。
0245nobodyさん2006/03/19(日) 12:50:57ID:???
>>244
> 2番目と3番目は内部では全く同じコードとして実行される。

クオートの違いがあるので、全く同じであるはずがないと思われ。
0246nobodyさん2006/03/19(日) 13:26:25ID:???
>>245
そう思うならコード覗いてみ
0247nobodyさん2006/03/19(日) 13:37:59ID:???
ダブルクォートだと変数の判定もする分処理的には遅いんじゃないの?
0248nobodyさん2006/03/19(日) 14:01:44ID:???
基本すらわかってない人間が質問に答えている糞スレはここでつか?

>>246
> そう思うならコード覗いてみ

で、どの部分で同じ処理をしているのか、具体的に提示してよ。
0249nobodyさん2006/03/19(日) 15:23:23ID:???
RSSの取得がうまくいかない

ttp://allabout.co.jp/career/cgiperl/closeup/CU20050131A/index3.htm

ここ参考にしてそのままコピペしてもエラーになるのはなんで?
モジュールはちゃんとインストールされてる
0250nobodyさん2006/03/19(日) 15:47:58ID:???
>>1

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0251nobodyさん2006/03/19(日) 15:56:26ID:???
>>244-248
よーしパパ暇だから両者の言い分を解説しちゃうぞー

>>244の言い分
$ perl -MO=Terse -e 'qq[hoge].$x.qq[fuga]'
$ perl -MO=Terse -e 'q[hoge].$x.q[fuga]'
を見るとバイトコードレベルで行われる処理は同じである。

>>245の言い分
パーサが変数の展開を考慮しなくてはいけなくなるのだから、
""の方が必要な処理は多いはずだ。


で、5.8.7でバイトコードを覗いてみると、""はパース時に中に変数展開が
含まれていた場合のみ連結を行うバイトコードに変換されるので、
そんなに気にする必要はないと思われる。古いバージョンではどうか知らないけど。
それよりも可読性等を重視するべきだと思う。
0252nobodyさん2006/03/19(日) 16:03:07ID:???
> よーしパパ

こんな古い言葉使ってる老人って・・・。
0253nobodyさん2006/03/19(日) 17:56:12ID:???
なるほどねー。
\"でエスケープした場合も実は対して気にするレベルじゃ無さそうなのかな。
0254nobodyさん2006/03/19(日) 17:59:18ID:???
そもそも文字列処理の速度で悩むような案件に perl なんか使うのかなぁと思う。
0255nobodyさん2006/03/19(日) 18:10:48ID:???
でも規模が大きいとか、処理が重いとか、ゲームCGIだったりとかで、
負荷が馬鹿にならないレベルだと、ちょっとの差が大きな違いになりそうじゃない?
0256nobodyさん2006/03/19(日) 18:12:55ID:???
あと、セキュリティの問題からmod_php使ってるレン鯖は少ないらしいから、
モジュール同士、CGIで動作のどちらでやっても速度はperl>phpになるだろうし、
perl以外に良い選択肢ってそもそも有るんだろうか。
Cは流石にだるいし。
0257nobodyさん2006/03/19(日) 18:15:33ID:???
お前らおもしろいな
0258nobodyさん2006/03/19(日) 18:15:59ID:3oCqRbiL
ならない。
0259nobodyさん2006/03/19(日) 18:22:14ID:???
>セキュリティの問題からmod_php使ってるレン鯖は少ないらしいから、

phpは軽い早いって嘘って事?
0260nobodyさん2006/03/19(日) 18:27:56ID:???
> 負荷が馬鹿にならないレベルだと、ちょっとの差が大きな違いになりそうじゃない?

大きな違いがある場所では、xs とか書けばよいのでは?
んで、そんなものを鯖 1 台でさばくんかね?

> phpは軽い早いって嘘って事?

一部嘘かもね。ぐぐればいろいろベンチあるぞ。
0261nobodyさん2006/03/19(日) 18:36:18ID:???
" と ' の速度差とかに気を遣う暇があったらもっと有意義なところに頭を使うべき。
0262nobodyさん2006/03/19(日) 18:46:28ID:???
ま、初心者でもできると言う意味じゃお手軽だし別に気にしてもいいとは思うがねw
0263nobodyさん2006/03/19(日) 18:49:15ID:???
あらかじめバイトコードに変換しときゃ同じだしな。
perlcc -B
0264nobodyさん2006/03/19(日) 21:10:06ID:???
別に制限されるものでもないし、やりたいならやれば?
ただ、眉毛剃ると空気抵抗が減って走るの早くなるよ、
ってのと同じレベルの話なわけだが。
まぁ、初心者でもできるしお手軽だわなw
0265nobodyさん2006/03/19(日) 21:11:40ID:???
意味のない煽りばかりですね
0266nobodyさん2006/03/19(日) 21:22:33ID:???
水泳選手はすね毛とかの体毛全部剃るけどなw
0267nobodyさん2006/03/19(日) 21:27:36ID:???
で、水泳初心者がすね毛とかの体毛全部剃るのに意味があるのかと
0268nobodyさん2006/03/19(日) 21:28:35ID:???
きもちぃぞ
0269nobodyさん2006/03/19(日) 21:41:19ID:???
>>268
結局、そういうことだよね。

' ' の方が速くなる気がして気持ちぃー (気のせい) って香具師はそうすりゃいいし、
開発効率&可読性を取るぜー (現実的) って香具師はそうすりゃいい。
0270nobodyさん2006/03/19(日) 21:42:41ID:???
ぶっちゃけ可読性は変わらない気がする。
どうせ色分けしてるし。
0271nobodyさん2006/03/19(日) 21:48:41ID:???
春だな
0272nobodyさん2006/03/19(日) 21:56:33ID:???
ああ春だ
0273nobodyさん2006/03/19(日) 22:00:31ID:???
と言い出す人が春真っ盛りの場合が多いです
0274nobodyさん2006/03/19(日) 22:29:27ID:???
それはそうかも
■ このスレッドは過去ログ倉庫に格納されています