This is perl 5, version 24, subversion 1 (v5.24.1) built for x86_64-linux (with 30 registered patches, see perl -V for more detail)
Copyright 1987-2016, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page.
$ perl -e 'print int("1A");' 1
$ python -V Python 3.5.2 $ python -c 'print(int("1A"))' Traceback (most recent call last): File "<string>", line 1, in <module> ValueError: invalid literal for int() with base 10: '1A'
PHPの型変換により特定の処理が動いてしまう (スコア:0)
いやいやいや
どういう頭の構造してたら(int)"1A"が1になる言語設計しようと思うんだよ…
Re:PHPの型変換により特定の処理が動いてしまう (スコア:2, 参考になる)
どういう頭の構造してたら(int)"1A"が1になる言語設計しようと思うんだよ…
御三家で言うと、Pythonだけがまともな頭の構造してるということですね。わかります。
Re: (スコア:0)
atoi("1A")はいくらになるの!っと
Re: (スコア:0)
#!ruby
p "1A".to_i
Re: (スコア:0)
#!perl
print int("1A");
Re: (スコア:0)
#!ruby
p Integer("1A") #~> ArgumentError: invalid value for Integer(): "1A"
p Integer("1A", 16) #=> 26
Re: (スコア:0)
> どういう頭の構造してたら
先頭から見ていって、数字と解釈できなくなるところまで変換。
というところじゃなかろうか。
Re: (スコア:0)
ヘッダが"1"でトレーラが"A"という構造か
Re: (スコア:0)
Re: (スコア:0)
歴史的な経緯があるんですかね。
ちなみにPASCAL(といってもボーランド系からの流れ)では、例外を投げるStrToIntと、戻り値不定だがエラーがあったことが分かるValがあるようです。
#この15年くらい触ってなかったのでググった。
Re: (スコア:0)
PHPのキャストはどうなってるんだって読んで行ったら、C言語のstrtod関数も結構大胆なんだね。doubleに変換できない文字があったことはわかるけど、変換自体が失敗するわけじゃなくて、無視するだけなんだ…未知の単位がくっついていて、いちいち引き剥がさなくてもいいようにっていう親切心なのかな??
http://www9.plala.or.jp/sgwr-t/lib/strtod.html [plala.or.jp]
Re: (スコア:0)
そのリンク貼ってその感想に至る理由がわからない
Re: (スコア:0)
print "1A" + "1A"; #2
print "1A" * 1; #1
my $str = "1A";
print ++$str; #2
どこからどうみても1Aは1だよね。
Re: (スコア:0)
それも酷いが、urlの引数のidの書式のチェックをする気がない?
断じてis_numericは使わない?
モコウ…これでチェックメイト?
Re: (スコア:0)
あれ?って思ったけどPHP7からはis_numericで16進はエラーになったのか
でもほとんどのところはまだ7じゃないんじゃない?
1Aは数値としては妥当だから7以前だと通しちゃうんじゃないかな
Re: (スコア:0)
ああ、0xついてないとfalseになるね、失礼しました