- 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
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
package Bool;
use strict;
use Carp qw/croak/;
use Scalar::Util qw/blessed/;
use base "Exporter";
our @EXPORT = qw/true false/;
use overload(
'bool' => \&op_bool,
'!' => \&op_not,
'==' => \&op_equal,
'!=' => \&op_not_equal,
'""' => \&op_to_string,
);
our $true = !0;
our $false = !!0;
use constant true => bless \$true;
use constant false => bless \$false;
sub import {
my($package) = @_;
$package->export_to_level(1, @_);
&Internals::SvREADONLY(\!0, 0);
&Internals::SvREADONLY(\!!0, 0);
${ \!0 } = true;
${ \!!0 } = false;
&Internals::SvREADONLY(\!0, 1);
&Internals::SvREADONLY(\!!0, 1);
}
sub op_bool {
my($self) = @_;
return $$self;
}
sub op_not {
my($self) = @_;
$$self ? false : true;
}
sub op_equal {
my($l, $r) = @_;
typecheck($l, $r);
return (($$l && $$r || !$$l && !$$r) ? true : false);
}
sub op_not_equal {
my($l, $r) = @_;
typecheck($l, $r);
return (($$l && $$r || !$$l && !$$r) ? false : true);
}
sub op_to_string {
my($self) = @_;
return $self ? "true" : "false";
}
sub typecheck {
map { blessed $_ eq __PACKAGE__ or croak "Bool: Type error" } @_;
return;
}
1;
true/false в perl.
true == true -> true
1 == 1 -> true
"a" eq "b" -> false
и т.п.
true == 1 # Ошибка
Пришлось долго искать как превратить !0 в true и !!0 в false, посмотрел в чужом модуле.
CapCoffee 22.08.2013 20:58 # 0
Lure Of Chaos 22.08.2013 21:02 # 0
gh0stwizard 22.08.2013 23:16 # 0
an0nym 23.08.2013 11:37 # 0
gh0stwizard 23.08.2013 18:31 # 0
Это же не ява. Для if/unless перл конвертирует значения в строки (при необходимости). Чтобы обрабатывать так как вы хотите, можно сделать так:
guest 23.08.2013 01:07 # 0
Dummy00001 23.08.2013 01:35 # +1
guest 23.08.2013 08:49 # −7
guest 23.08.2013 09:03 # −7
guest 23.08.2013 09:07 # −7
guest 23.08.2013 09:29 # −5
guest 23.08.2013 12:17 # −10
guest 23.08.2013 12:29 # −10
111111
guest 23.08.2013 13:07 # −10
guest 27.08.2013 11:15 # −14
МАНЬКА-ПИССТУШОК МОИ КОНТАКТЫ
vk.com/tehanonym — АНОНИМНЫЙ ВКОНТАКТИК
pastebin.com/vLBegGGK — ЗАПИСКИ ОЛДФАГА
sprashivai.ru/thepiston — ЗАДАЁМ ЛЮБЫЕ ВОПРОСЫ
youtube.com/user/Abdulonymous — АРХИВ ДОБРА
kinopoisk.ru/user/1414450/votes/ — ФИЛЬМЫ
myanimelist.net/animelist/thePiston — АНИМЕ
github.com/theanonym — ГОВНОКОДЫ
govnokod.ru/user/3236 — ГОВНОКОДЫ
an0nym 28.08.2013 00:52 # −1