Perl コーディング初心者質問コーナー Part35
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/05/26 16:48ID:kkhhiYmo【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0714nobodyさん
04/07/03 23:36ID:???$i=1;
while(1){ if(@_%10<10) $i++) }
return $i+1;
}
0715nobodyさん
04/07/03 23:38ID:???$i=1;
while(1){
$j=1;
for($j=0; $j<$i; $j++){ $j*=10; }
if(@_%$j<10) $i++) }
return $i+1;
}
0717nobodyさん
04/07/03 23:51ID:???別に動かそうと思って書いたわけじゃないが
0719nobodyさん
04/07/04 00:03ID:???10のn乗で割っていくってようりょうだぞーってレスのつもりだが
で、10で割り続けてたので単純にpow入れようやっておもい
Perlってpowあったかなーとおもい、自分でn乗だすようにしてーー
って適当にやったから括弧の場所とかほっときぱなしになったわけだが
良い訳とかキモイ
0720nobodyさん
04/07/04 00:06ID:???int(log($NO)/log10)+1
0721719
04/07/04 00:06ID:???たしかにそうとられても仕方ない罠。
0723nobodyさん
04/07/04 00:12ID:???0724719
04/07/04 00:16ID:???0725nobodyさん
04/07/04 00:26ID:???length取ったほうが速そうだな。誰かベンチしてみない?
0726nobodyさん
04/07/04 00:49ID:???0727nobodyさん
04/07/04 00:52ID:???0728709
04/07/04 00:54ID:Udr24Tj0lengthで調べてみたら、出来ました。ありがとうございました。
もう一点、お聞きしたいのですが、
特定の文字列と一致した場合だけエラーになるようにしたいのです。
$NO="123456";
$NO2="23";
if ($NO eq /$NO2/g) {
print "エラーです";
}
こんなふうに書いたのですが、上手くいきません。
サイトをいくつか見ながら書いてみたのですが、原因がわかりません。
すいません、どなたか教えてください。
0729nobodyさん
04/07/04 00:54ID:???=~
0730nobodyさん
04/07/04 01:35ID:???0732709
04/07/04 01:47ID:Udr24Tj0HTMLで言う、「とほほのWWW入門」みたいに、
Perl開設の良いサイトなど無いでしょうか?
ここのスレに載っていたページはどうもわかりにくくて・・・
0733nobodyさん
04/07/04 01:49ID:???@no = qw(1 2 3 4 5 6);
print $_ = @no."桁\n";
0734nobodyさん
04/07/04 02:16ID:???http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
0735nobodyさん
04/07/04 02:41ID:???> ここのスレに載っていたページはどうもわかりにくくて・・・
だったらなおのこと、本も用意したほうがいいですよ。
>>733
頑張ってください。>>726-727も眺めつつ。
0736nobodyさん
04/07/04 03:33ID:???じゃあ「CGI&Perl究極のレシピ350 とほほが教える」でも買ってみたら?
http://www.esbooks.co.jp/books/detail?accd=31095149
Perlの解説本というより目的別のサンプル集みたいなのだから
丸々コピーばかりしないで参考にすればいくらか勉強にはなるだろう。
0737nobodyさん
04/07/04 07:41ID:???何気に役に立つよ
0738nobodyさん
04/07/04 10:09ID:???知ってると思うけど
http://tohoho.wakusei.ne.jp/wwwperl.htm
0739nobodyさん
04/07/04 13:38ID:bJ9Q5bUPパスワードの暗号か処理で暗号化を施した場合、
暗号化をログから解除して元パスワードを知ることはやはり不可能でしょうか?
例えば↓
sub encrypt {
local($inpw) = $_[0];
local(@char, $salt, $encrypt);
@char = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
srand;
$salt = $char[int(rand(@char))] . $char[int(rand(@char))];
$encrypt = crypt($inpw, $salt) || crypt ($inpw, '$1$' . $salt);
return $encrypt;
}
のようなものからパスワードを探ることは・・・?
0740nobodyさん
04/07/04 14:18ID:???0741nobodyさん
04/07/04 14:58ID:???0742nobodyさん
04/07/04 18:07ID:???0743nobodyさん
04/07/04 18:39ID:???$testに環境変数の一部をUserAgent,IPみたいにコンマ区切りで入れたいだけなんですが…
助けてください…
0744nobodyさん
04/07/04 18:43ID:???助けてください…
0745nobodyさん
04/07/04 18:44ID:???07467M. ◆dq7M./4Uw.
04/07/04 18:58ID:???それが出来ないから暗号として成り立つわけで。。。
0747nobodyさん
04/07/04 20:30ID:???今は
$file1 = 'one.jpg';
$file2 = 'two.jpg';
$temp = 'temp.jpg';
rename $file1,$temp;
rename $file2,$file1;
rename $temp,$file2;
ってやってるけど、いい方法ある?
教えてエロい人!
0748nobodyさん
04/07/04 21:22ID:???renameの戻り値は見といたほうがいいと思うよ。
あとはtemp.jpgが固定なのとrenameだと上書きされる
のがちと気になるかな。
私がやるなら多分こんな感じにすると思う。最初のrenameを
linkにしたのは一時ファイル名がすでに使われてるときに上書き
しないため。途中でエラーになった時の処理をどこまで凝るかは
その時によるけどor dieは一番手抜きのパターンね。
$file1 = 'one.jpg';
$file2 = 'two.jpg';
$temp = "temp.jpg.$$";
link $file1,$temp or die;
rename $file2,$file1 or die;
rename $temp,$file2 or die;
0750nobodyさん
04/07/04 22:07ID:Sq5R/TGN全文検索でヒットした奴を
行の真ん中に表示されるようにしたいんですがどうすれば良いんですか?
つまりglobalを検索したとすると、
global SchoolNet Director
we have increased the US publics global awareness
CanWest global Communications
help address global warming issues
California Wood Use Endangers global
↑こういう風に結果を出したいんです。
行全体を出力して、まんなかに検索した語を表示させたいんですが
そもそもどういう方針でやればいいのかさえわかりません。
どうすれば良いんですか?
0752nobodyさん
04/07/04 22:46ID:???もしそうだとしたら、単にHTMLの話だから、
プログラミングでも、Webプログラミングでもなく、Web製作板に行くべきだな。
0755nobodyさん
04/07/05 00:30ID:AbFm7153windowsで動かしているとき、
perlを動かすときにdos窓のウィンドウタイトルはc:\perl\bin\perl.exeや
コマンドプロントから起動させた場合はc:\winnt\system32\cmd.exeのようになって
いると思うのですがそれを任意の文字に設定したいのです。
色々検索してショートカットから起動すれば変えられるのはわかったのですが
当方、rocket mouseというtoolからウィンドウタイトルを任意の文字にした
ものを起動させるのが目的でして、このtoolの場合、plファイルのショートカット
を指定してもそのショートカットから起動させるのではなく、リンク先を参照して
起動するため、ウィンドウタイトルを変更して起動させることができません。
ここを調べろ、ここは確認したのかなどのご指摘ありましたらよろしくお願いします。
0758755
04/07/05 03:14ID:???>>756さんの言うとおりもう一度1を読み返してみます。
>>757
私はてっきりperlスレで質問する内容だと思ったのですが
ご指摘いただいたので違う方向からも再度考えさせてもらいます。
ありがとうございました。
0759nobodyさん
04/07/05 04:03ID:???fork関数を使えば良いですか?
0760nobodyさん
04/07/05 06:29ID:???自分はこんな感じです
/&/&/
/\"/"/
/\'/?/
/</</
/>/>/
/\s/ /
/\r\n/<br>/
/\r/<br>/
/\n/<br>/
他に
こんな文字も危険、この文字はこれに置換がいい的なアドバイスもOK
0761nobodyさん
04/07/05 06:30ID:???/&/&amp;/
/\"/&quot;/
/\'/&#39/
/</&lt;/
/>/&gt;/
/\s/&nbsp;/
/\r\n/<br>/
/\r/<br>/
/\n/<br>/
0762nobodyさん
04/07/05 06:48ID:???0763nobodyさん
04/07/05 10:32ID:???1. コーディング以前の箇所で躓いている
2. 自分の抱える問題がコーディングの問題なのかどうかを切り分けできない
3. そもそもコーディングという言葉の意味を知らない
のいずれかだから。
たぶんこのスレも「Perlを使ったCGIに関する質問ならなんでもOK」だと思われてる
0764nobodyさん
04/07/05 10:59ID:???スレタイ嫁
だけじゃ通じなくなってきたワケだな。
0765nobodyさん
04/07/05 15:04ID:???0768nobodyさん
04/07/05 16:48ID:kgB0NkdW### 除算の繰上げ
$a = 10;
$b = 3;
$c = $a % $b;
$d = int($a / $b);
if($c){$d++;}
いつもこんな感じですが
なんか、もっさりしてます。
スマートにコーディングしたものですが・・・。
0769nobodyさん
04/07/05 18:12ID:???$b = 3;
$d = int(($a + $b - 1) / $b);
0771nobodyさん
04/07/05 23:29ID:???0772nobodyさん
04/07/06 00:04ID:Xk4rbtY7ファイルサイズを小さくしたいのですが、できません。
ググってみたところ
$image->Strip();
で削除できるという記述をみたのですが、同じようにやっても
画像が表示できなくなります。
どうやればexif情報だけすっぱり消せるかご存知の方は
いらっしゃいませんでしょうか?
0773nobodyさん
04/07/06 02:32ID:???cookieのexpiresに使える形式の時間の取得って、
gmtime time
だと全て数字だから微妙に違うよね。
cookie用に使える形式にするのに自分でルーチンを作ろうかなとか思ってるけど、
既存のモジュールで、こういうメソッドもってるやつないのかな?
0774nobodyさん
04/07/06 02:52ID:???http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI/Cookie.pod
0775nobodyさん
04/07/06 04:13ID:???http://cachu.xrea.jp/perl/
0777nobodyさん
04/07/06 08:08ID:???PERLでは引数が整数であるか、少数点つきの数字であるかを判定してくれる関数はないのでしょうか?
0780nobodyさん
04/07/06 10:23ID:???print "ぎーーーーーーーーーーーーーーーーーーーーーーーっ" if not $answer - int $answer;
0781777=773
04/07/06 10:33ID:???>>774
なんかムダなソースを読みこんで重くしたくないから、自分で作ってみた。
野暮ったいソースだから、見にくいけど、色々突っ込んでくれるとありがたい。
とりあえず2時間後のGMTを計算するサブルーチン。
ifのとこは上から
処理1.何も繰り上がらず2時間だけプラス
処理2.日、曜、時刻だけ繰り上がり
処理3.処理2+月も繰り上がり
処理4.処理3+年も繰り上がり
一応うるう年は4で割り切れるって部分だけは採用してる。100年とか400年とかは
どうせ生きてないから無視した。
0782777=773
04/07/06 10:39ID:???( my $sec , my $min , my $hour , my $mday , my $mon , my $year , my $wday , my $isdat , my $yday ) = gmtime time;
$year += 1900;
my @wday = qw/Sun Mon Tue Wen Thu Fri Sat Sun/;
my @mon = qw/Jan Feb Mar Apr May Jun Jul Aus Sep Oct Nov Dec Jan/;
my @a = qw/31 28 31 30 31 30 31 31 30 31 30 31/;
if ( !($year % 4) ) { $a[1] += 1 ; }
my @b = qw/00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60/;
my $timer;
if ( $hour < 22 ) {
$hour += 2;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} elsif ( $a[$mon] != $wday ) {
$hour -= 22;
$wday += 1;
$mday += 1;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} elsif ( $mon != 11 ) {
$hour -= 22;
$wday += 1;
$mday -= $a[$mon];
$mon += 1;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
} else {
$hour -= 22;
$wday += 1;
$mday -= $a[$mon];
$mon += 1;
$year += 1;
$timer = qq|$wday[$wday], $mday-$mon[$mon]-$year $b[$hour]:$b[$min]:$b[$sec] GMT|;
}return $timer;}
0783nobodyさん
04/07/06 10:41ID:???cookieの有効期限はリミットの2030付近にするのがナウイですよ。
0785777
04/07/06 10:53ID:???のところは
$mday -= $a[$mon] -1;
だった。
0787nobodyさん
04/07/06 12:22ID:???0788nobodyさん
04/07/06 13:40ID:DU8HZvlsabc:123
aiu:456
1.
open(IN, "list.txt");
while (<IN>) { print; }
close(IN);
2.
open(IN, "list.txt");
while (<IN>) {
$tmp = <IN>;
print "$tmp<br>\n";
}
close(IN)
1.だと abc:123 aiu:456 と出力されるのに
2.だと abc:123 としか出力されないのはどうしてでしょうか、、?
0791nobodyさん
04/07/06 13:57ID:DU8HZvlsすいません、aiu:456 としか出力されない の間違いでした・・・
0792nobodyさん
04/07/06 15:02ID:DU8HZvlsopen(IN, "list.txt");
while (<IN>) { 処理 }
データを1行単位で読み込み、データのある行が存在する間は while文で繰り返す
という意味ではないのでしょうか、、、?
0793nobodyさん
04/07/06 15:11ID:???$tmp = <IN>; # ここで list.txt の二行目が読み込まれる
print "$tmp<br>\n" # 当然 $tmp の中には二行目しか入っていない
0794nobodyさん
04/07/06 15:37ID:DU8HZvls<IN>で取得したものは$_ に代入されるのですね。
本当に助かりました。有難うございます。
0795nobodyさん
04/07/06 15:44ID:???# 何だか表現が微妙に気になる…。
1: abc:123
2: aiu:456
3: abc:123
4: aiu:456
5: abc:123
ファイルの中身をこの5行にして、実験してみるのもいいかも。
0796nobodyさん
04/07/06 15:49ID:???早速100行くらいにして試しています。
0797nobodyさん
04/07/06 18:37ID:???っでねが?
0801nobodyさん
04/07/07 03:43ID:Dj0xztEm受け取った変数を自動的に
別ファイルへ渡す処理はどうやってすればいいのでしょうか?
(フォームを使えば変数を渡せるけど、
自動的には不可能ですよね?)
ヒントでもいいので教えてくだせえ
0803nobodyさん
04/07/07 11:11ID:???use CGI;
$q = CGI->new;
$hash = $q->Vars;
print $hash;
としたら
HASH(0x8158408)と表示されます。
%hash = $q->Vars;
だとeachなどを使ってもキーなどが出てきません。
色々と検索をするのですが、どうして良いものか解からなくなってきたので
どなたか良い方法を教えて下さい。
いちおう、下記のサイトは見たのですが上手く目的のことができませんでした。
簡単なCGI
http://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm#FETCHING_A_LIST_OF_KEYWORDS_FROM
0804803
04/07/07 11:20ID:???自分で色々と勘違いをしていました。
自己解決しました。
0805nobodyさん
04/07/07 12:12ID:lnfuZW7Xその関数を抜けたときって
require したファイルの内容は有効なんでしょうか?
0809nobodyさん
04/07/07 16:32ID:???1: abc:123
2: aiu:456
3: abc:123
4: aiu:456
5: abc:123
open(IN, "list.txt");
while (<IN>) {
$tmp .= $_;
}
print "$tmp\n";
0811nobodyさん
04/07/07 16:46ID:???open(IN, "list.txt");
while ($tmp = <IN>) {
print "$tmp<br>\n";
}
close(IN)
暗黙の$_使うか明示的に一時変数$tmpを使うか、だけの違いだろ。
>>808
間違ってるよね
■ このスレッドは過去ログ倉庫に格納されています