Perlコーディング初心者質問スレ Part 47
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/03/01(水) 15:39:31ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0147nobodyさん
2006/03/08(水) 21:45:07ID:???あ〜そうそれ
エイリアスってやつ
言葉間違えたorz
0148143
2006/03/08(水) 22:04:58ID:IC708NPTリンクに置換することが出来ました。
ありがとうございます。
0149nobodyさん
2006/03/10(金) 14:44:19ID:Uu8wqJhR変数「$daylimit」にaaaa/bb/cc(またはaaaa/b/c)の形で日付が格納されています。
これを元にソートしたいのです。
そこで疑問が2つあります。
1.aaaa/bb/ccからスラッシュを抜く方法(aaaa/bb/cc→aaaabbccにする)
2.1月または1日などの10の位がない時に0を付け足す方法(aaaa/b/c→aaaa0b0c)
これはどのようにしたら良いのですか?
方法を教えてください。お願いします。
0150nobodyさん
2006/03/10(金) 14:51:12ID:???ちなみに日付は文字列順になるから/は抜かなくてもおk
0151ヽ(´ー`)ノ ◆.ogCuANUcE
2006/03/10(金) 14:53:34ID:???1. split('/', $daylimit)
2. sprintf('%04d%02d%02d', split('/', $daylimit))
sort する時は sprintf() した結果を cmp で比べるといい。
0152nobodyさん
2006/03/10(金) 15:00:19ID:Uu8wqJhRということは、
$daylimit2 = sprintf('%04d%02d%02d', split('/', $daylimit)) ;
として、$daylimit2でソートしたらOKって事ですね。
ありがとうございました。
0153nobodyさん
2006/03/10(金) 20:49:15ID:???0154nobodyさん
2006/03/10(金) 20:55:15ID:???0155nobodyさん
NGNG0156nobodyさん
2006/03/11(土) 01:02:36ID:???よくある商品を選んだら注文フォームに飛ぶHPを作りたいのですが
注文フォームで すでに商品名が入力済みの形を取っている
を実現したいのですが
よろしくお願いします
0157nobodyさん
2006/03/11(土) 01:14:18ID:???0158nobodyさん
2006/03/11(土) 01:24:04ID:???type="text" なら、input のvalue に商品名入れな
0159nobodyさん
2006/03/11(土) 01:32:55ID:???質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0160156
2006/03/11(土) 02:44:05ID:???まずタグから勉強して出直してきます
0161nobodyさん
2006/03/11(土) 03:03:59ID:2NEkCx5lソースに use encoding が入っていると、
デバッガ動かしたときに
「問題が発生したため、Perl Command Line Interpreter
を終了します。ご不便をおかけして申し訳ありません。」という
ポップアップが出てしまいます。
(-d 無しだと普通に動く)
インストールやりなおしたりしたんですが現象変わりません。
なぜ??
0162nobodyさん
2006/03/11(土) 04:37:32ID:???0163nobodyさん
2006/03/11(土) 05:06:27ID:???バグデータベースにも登録されてる。
ttp://bugs.activestate.com/show_bug.cgi?id=39261
漏れは回避方法知らん。
>>162
参考までに貴方の開発環境をお聞かせ願いたい。
cygwinのperl?それともPCのOSにLinuxかBSD辺りを常用してるとか?
0164nobodyさん
2006/03/11(土) 05:36:10ID:???0165nobodyさん
2006/03/11(土) 05:42:46ID:???> 参考までに貴方の開発環境をお聞かせ願いたい。
> cygwinのperl?それともPCのOSにLinuxかBSD辺りを常用してるとか?
VMware とか colinux とか知らない馬鹿ワロス
0166nobodyさん
2006/03/11(土) 06:04:34ID:???そうか、貴方はスクリプトを書いては一々仮想マシン上に移してテストしてるのか。
VMwareの共有フォルダ機能やSambaでも使って手軽にやってるのかな。
若しくは自動でFTP経由で変更分をアップロードするスクリプトでも組んでるか。
参考になった。ありがとう。
0167nobodyさん
2006/03/11(土) 06:23:19ID:???> そうか、貴方はスクリプトを書いては一々仮想マシン上に移してテストしてるのか。
> 若しくは自動でFTP経由で変更分をアップロードするスクリプトでも組んでるか。
その機械に ssh なり何なりでログインして書くという方法もありますよ?
0170nobodyさん
2006/03/11(土) 09:48:52ID:???0171nobodyさん
2006/03/11(土) 11:10:44ID:???0172nobodyさん
2006/03/11(土) 16:05:01ID:???my $mail=$form->Get('mail');
my $adc;
my $randam=int(rand(15));
if ($randam < 1){ $abc = q| ☆☆☆☆☆ | }
elsif ($randam < 2) { $abc = q| ☆☆☆☆☆ | }
が15行です
☆の部分に最初は顔文字が入って、正常に動いてたのですが
日本語に入れ換えたらエラーが出てうまくいきません
日本語で30文字ぐらい(改行有り)赤色の文字色で表示させたいのですが、どのように記述したらよろしいでしょうか?
puleは全然わからない初心者ですがよろしくお願いします
0173nobodyさん
2006/03/11(土) 16:18:52ID:???puleはヒドイ・・・
q|〜|は好きな記号をクォートにする構文。
この場合 | を使ってるので文字列中に | があれば問題になる。
sjis使ってるならこれらの文字の下位バイトも問題に。「−ポл掛弓芸旨酢掃竹倒怖掟」(一例)
q{〜}とかq!〜!とかq(〜)とかに変える。
あとはエラーメッセージの最後にエラー行載ってるからそれを参考に。
0175nobodyさん
2006/03/11(土) 17:14:12ID:???酷すぎる
0176nobodyさん
2006/03/11(土) 18:40:51ID:???となっている文字列を
AB,CD,EF,GH
という風に二文字ずつでリストに展開するにはどうすればよいですか?
元の文字列は必ず偶数個です。
0177nobodyさん
2006/03/11(土) 18:53:04ID:???print join( ' | ' , split( /(..)/, $str ) );
とかしてみたんですが、結果が
| AB | | CD | | EF
となって変な感じです。
AB | CD | EF
となってほしいのですがうまくいきません。
0178nobodyさん
2006/03/11(土) 18:54:15ID:???my $str = 'ABCDEFGH';
print join(',', $str =~ /../g), "\n";
print join(',', unpack '(A2)*', $str), "\n";
0179nobodyさん
2006/03/11(土) 19:00:40ID:???unpackでできました。
(A2)*なんてできたとは知りませんでした。
どうもありがとうございます。
0180172
2006/03/11(土) 19:22:03ID:???本当なんもわからないのですみませんです・・
見よう見まねで他のファイルと比べてみて適当にいじってしまいました。
少しネットで調べてみたのですが、初歩的なことがわかっていないため何がなになのかわからない状態です・・
>>173さん
sjisを使ってます。一例にあげてくださった文字や、文字列中にはlは使ってません
調べてみても良くわからなかったのですが、
文字化けする文字の後ろに「\」をつけたり「'」で文字列を挟んで対処するような?ことが載っていて
「'」で文字列を挟むことは試してみましたが駄目でした
あんま適当にいじっても良くないかな?試してません・・
レスを参考に少し勉強してみます・・
レスありがとうございましたm(_ _)m
0181nobodyさん
2006/03/11(土) 20:02:53ID:???0183nobodyさん
2006/03/12(日) 01:25:09ID:???MVC な cgi 以外配布禁止にしたらどうだろう。
0184nobodyさん
2006/03/12(日) 02:24:37ID:???0185nobodyさん
2006/03/12(日) 03:08:46ID:???0187172
2006/03/12(日) 09:02:35ID:???昨日見た専門のサイトは、難しいことばかりで
何がなんだかさっぱりでした
皆様の助言は初心者の私でもわかりやすく
検索しやすくとても参考になります。
本当、ありがとうございました
0188nobodyさん
2006/03/12(日) 10:16:50ID:???どこですか?
0189nobodyさん
2006/03/12(日) 22:15:07ID:???で「ー」と「−」を引っ掛けようと思っていたのですが、
なぜだか「−」のみ引っかかりません。
すみませんがご教示いただけますと幸いです。
0192nobodyさん
2006/03/12(日) 23:01:28ID:???「ー」\x81\x5B
「−」\x81\x7C
\x7Cは「|」
あとは調べられるよな
0194189
2006/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**」というように変換してくれるようなサイト等
があればご教示いただきたい次第です。
度重なる質問ですみません。
0195190
2006/03/12(日) 23:50:59ID:???なんかそのサイトの記述が違ってるような。
'(?:\xA1[\xBC\xBD\xC1])' → ー―〜
'(?:\xA1[\xBC\xDD\xC1])' → ー−〜
だと思われ。
(真ん中の文字が微妙に違う)
> 「−」と入力して「\x**」というように変換してくれるようなサイト等
俺は UNIX で hd コマンドを使ってるけど、 Windows とかサイトはわかんない。すまん。
0196nobodyさん
2006/03/12(日) 23:51:39ID:???この程度のことを自分でやろうと思わないのなら、Perl のみならず、
あらゆるプログラム言語から手を引くべきだろうね。
また、仕事でやらされている状況なら、コンビニの店員のバイト、
もしくは、地面掘りの仕事に転職するべきかと。
0197nobodyさん
2006/03/13(月) 00:02:18ID:???print unpack "H*", "−";
と書いたファイルをeucで保存して実行するだけ。
俺は文字コード表使ってるが。
>>196
初心者スレに居ると身体に悪いぞ。
0199nobodyさん
2006/03/13(月) 01:42:55ID:???非常に参考になるアドバイス、誠に有難うございました。
後述しますが、おかげさまで変換プログラムで確認できる
ようになりました。
この場をお借りし御礼申し上げます。
文字コード表は後で探してみたいと思います。
>>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
なんか興味深いね。
0202nobodyさん
2006/03/13(月) 09:08:48ID:???って閉鎖されてるようだけど何のHP?
0203nobodyさん
2006/03/13(月) 09:48:40ID:???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:???0205149
2006/03/14(火) 11:00:15ID:K408BhkZ前回どこよりもすばやく的確な解答を得ることができたので、またまた頼らせていただきます。
前回は「日付からスラッシュを抜きそれでソートする方法」等を教えていただいたのですが、それを別の場所でも利用しようと考えました。
データの自動非表示とでも言えばいいのかな?指定日になったら自動で一部データを非表示にするという物です。
考えとしては以下のような感じです。
1.表示非表示はチェックボックスで行う。チェックが入っていればその情報を表示という感じで。
もちろん、その変数は空白か1が入り、1ならcheckedとする。
2.CGIに良くありがちな日付取得より年月日を取得する。
3.掲載期限とシステム日付を比較し、「システム日付≧掲載期限」であれば表示チェックを空白にする
4.勝手に消えてくれてウマー
こんな感じです。
イベント情報掲載とか新譜発売情報なんかにも応用が利くんじゃないかと。
で、ない頭をフルに使って以下のようにやってみました。もちろんですが、元となるCGIや他のCGIから切り張りしたものです(;´∀`)
保存してある変数は、不必要だと思うものは消しちゃったので、上下でずれがあるかもしれませんが、脳内変換お願いします。
・・・
で、下にソース貼り付けたら文字数オーバーしたので、とりあえずここまで。
0206149
2006/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:???を
int($sysdate2) >= int($climit2)
にしたらどうなる?
0208149
2006/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:???藻前が勝手に消えてくれると(゚д゚)ウマー
0212nobodyさん
2006/03/14(火) 12:11:21ID:???マルチだったのかよ
0213nobodyさん
2006/03/14(火) 12:41:09ID:???0214149
2006/03/14(火) 14:29:16ID:K408BhkZとりあえず、釣りかもしんないけど、マジで解答ほしいので、マジレスしてみる。
>>209
何ゆえその1行で仕事と判断?丁寧に記入するヤツはすべて仕事なの?
>>210
確かに、これはおかしい。ごめんね。採点じゃなくて、校正・訂正・指導、まぁ何でも良いけど、動くように教えてplz
>>211
あんたのような揚げ足取りが消えてくれた方が2chシステム的にはウマーだと思うが?
>>212
某Q&Aサイトで質問→解答なし。→質問削除→さらに別のQ&Aサイトで質問→有効回答なし。→質問終了→2chに書き込み→即日解答。しかもビンゴ!
どこがマルチよ?
厨房か工房かしらんが、言葉遣いもそれなりにあわせてみたよ。
0216nobodyさん
2006/03/14(火) 14:52:48ID:???> 某Q&Aサイトで質問→解答なし。→質問削除→さらに別のQ&Aサイトで質問→有効回答なし。→質問終了→2chに書き込み→即日解答。しかもビンゴ!
どう見てもマルチです、本当に(ry
そういう場合は、ここで聞いたけど回答が無かったと、元の質問を示すのが慣例。
もしくは事前に断わるか。
0217nobodyさん
2006/03/14(火) 14:58:34ID:???その言い分を真に受けるとすると、前の質問が close してから質問してるみたいだし、
そゆのはマルチとは言わないんじゃね?
0218nobodyさん
2006/03/14(火) 15:03:25ID:???それなら「他のところで質問をしたけど答えが出なかった」だけでもいいから、
事前に断わるべきだろう。
答える奴だって人間だから、感じ悪いと思う奴だっているよ。
それぐらい、常識で判断してほしい。
0219nobodyさん
NGNGこれ何か意味あんのか。
つーかYahoo掲示板でも行けよカス
0220nobodyさん
2006/03/14(火) 15:20:39ID:???事前に断りがあるかどうかは別にして、
>>212で
>> 前回どこよりもすばやく
>マルチだったのかよ
この1行でマルチと決め付ける必要性も無いと思うがな
>>212 =>>218
だった場合、オマエに常識を語る資格はそうないと思われ
0223nobodyさん
NGNG馬鹿と馬鹿が煽り合ってんの
見てて楽しいからもっとやれよ
0224nobodyさん
2006/03/14(火) 16:03:40ID:???0227nobodyさん
2006/03/14(火) 16:47:10ID:???0228nobodyさん
2006/03/14(火) 16:54:23ID:???0229nobodyさん
2006/03/14(火) 17:04:47ID:???答えてあげたい気持ちは満々なのだが、
いかんせん質問の意味がさっぱりわからないので答えようがない。
0231nobodyさん
2006/03/14(火) 20:12:03ID:???こんな感じので、コメント中にURLが含まれる場合
そのURLへのリンクを作成して
表示される文字列はURLではなく
「外部リンク」とか任意の文字列にしたい場合はどのようにすれば良いのでしょうか?
0232nobodyさん
2006/03/14(火) 20:28:50ID:???0233nobodyさん
2006/03/14(火) 20:48:54ID:???</a>直前の $1 とか $2 の部分を 外部リンク とでも書き換えてください
0234nobodyさん
2006/03/14(火) 23:21:54ID:???あいかわらずのスキルなんでつね。w
0235nobodyさん
2006/03/14(火) 23:26:28ID:???0237nobodyさん
2006/03/14(火) 23:31:05ID:???0240nobodyさん
2006/03/19(日) 10:45:53ID:???$a = "あいうえおかきくけこ$x{'TEST'}たちつてとなにぬねの";
の場合と
$b = "あいうえおかきくけこ".$x{'TEST'}."たちつてとなにぬねの";
とか
$c = 'あいうえおかきくけこ'.$x{'TEST'}.'たちつてとなにぬねの';
って感じで連結するのはどれが一番お薦め?
連結をあまり好ましくないっぽい書き方してる書き込みを昔見た気がするので、
$aのやり方の方がいいのかなとも思ったけど、
負荷的にはなるべくシングルクォーテーション使ったほうがよさそうだしで、ちょっと迷ってまっす。
ひょっとしたら連結の方が負荷高かったりしたら元も子もないし・・・
0241nobodyさん
2006/03/19(日) 11:08:41ID:???0242nobodyさん
2006/03/19(日) 11:31:18ID:???適材適所です。
頑なに法則を守っていると可読性が落ちたりします。
速度を考えるなら、連結自体から見直せば良いかもしれません。
0243nobodyさん
2006/03/19(日) 11:52:52ID:???strcat しまくるべきだな。
0244nobodyさん
2006/03/19(日) 12:12:44ID:???2番目と3番目は内部では全く同じコードとして実行される。
1番目との比較は、実装や環境に依存。
なので、自分の対象とする環境でベンチマークとりなされ。
0245nobodyさん
2006/03/19(日) 12:50:57ID:???> 2番目と3番目は内部では全く同じコードとして実行される。
クオートの違いがあるので、全く同じであるはずがないと思われ。
■ このスレッドは過去ログ倉庫に格納されています