YanoRyuichi.com/
Wiki
Blog
GitHub
Sandbox
開始行:
* ビット演算による権限制御 [#h9cf755d]
#!/usr/bin/env perl
use strict;
use warnings;
use 5.012;
# 権限を設定
my $none = 0x0;
my $read = 0x1 << 0;
my $write = 0x1 << 1;
my $execute = 0x1 << 2;
my $extra = 0x1 << 3;
# 権限を付与
my $all = $none | $read | $write | $execute;
# 権限をはく奪
my $not_all = $all & ~$read;
my %actions = (
+read => $read,
+write => $write,
+execute => $execute,
+extra => $extra,
);
# 権限を2進数で確認
printf( "%- 10s%04b\n", "none", $none ); # none ...
printf( "%- 10s%04b\n", "read", $read ); # read ...
printf( "%- 10s%04b\n", "write", $write ); # write ...
printf( "%- 10s%04b\n", "execute", $execute ); # execut...
printf( "%- 10s%04b\n", "extra", $extra ); # extra ...
printf( "%- 10s%04b\n", "all", $all ); # all ...
printf( "%- 10s%04b\n", "not_all", $not_all ); # not_al...
say '';
# 各権限の内容を確認
if (($all & $read) != 0) {
say "all can read ? => OK"; # all ca...
} else {
say "all can read ? => NG";
}
if (($write & $read) != 0) {
say "write can read ? => OK"; # write ...
} else {
say "write can read ? => NG";
}
if (($not_all & $read) != 0) {
say "not_all can read ? => OK"; # not_al...
} else {
say "not_all can read ? => NG";
}
if (($not_all & $write) != 0) {
say "not_all can write ? => OK"; # not_a...
} else {
say "not_all can write ? => NG";
}
say '';
while ( my ( $k, $v ) = each %actions ) { # all ca...
if ( ( $all & $v ) != 0 ) { # all ca...
say "all can $k ? => OK"; # all ca...
} # all ca...
else {
say "all can $k ? => NG";
}
}
say '';
while ( my ( $k, $v ) = each %actions ) { # extra ...
if ( ( $extra & $v ) != 0 ) { # extra ...
say "extra can $k ? => OK"; # extra ...
} # extra ...
else {
say "extra can $k ? => NG";
}
}
終了行:
* ビット演算による権限制御 [#h9cf755d]
#!/usr/bin/env perl
use strict;
use warnings;
use 5.012;
# 権限を設定
my $none = 0x0;
my $read = 0x1 << 0;
my $write = 0x1 << 1;
my $execute = 0x1 << 2;
my $extra = 0x1 << 3;
# 権限を付与
my $all = $none | $read | $write | $execute;
# 権限をはく奪
my $not_all = $all & ~$read;
my %actions = (
+read => $read,
+write => $write,
+execute => $execute,
+extra => $extra,
);
# 権限を2進数で確認
printf( "%- 10s%04b\n", "none", $none ); # none ...
printf( "%- 10s%04b\n", "read", $read ); # read ...
printf( "%- 10s%04b\n", "write", $write ); # write ...
printf( "%- 10s%04b\n", "execute", $execute ); # execut...
printf( "%- 10s%04b\n", "extra", $extra ); # extra ...
printf( "%- 10s%04b\n", "all", $all ); # all ...
printf( "%- 10s%04b\n", "not_all", $not_all ); # not_al...
say '';
# 各権限の内容を確認
if (($all & $read) != 0) {
say "all can read ? => OK"; # all ca...
} else {
say "all can read ? => NG";
}
if (($write & $read) != 0) {
say "write can read ? => OK"; # write ...
} else {
say "write can read ? => NG";
}
if (($not_all & $read) != 0) {
say "not_all can read ? => OK"; # not_al...
} else {
say "not_all can read ? => NG";
}
if (($not_all & $write) != 0) {
say "not_all can write ? => OK"; # not_a...
} else {
say "not_all can write ? => NG";
}
say '';
while ( my ( $k, $v ) = each %actions ) { # all ca...
if ( ( $all & $v ) != 0 ) { # all ca...
say "all can $k ? => OK"; # all ca...
} # all ca...
else {
say "all can $k ? => NG";
}
}
say '';
while ( my ( $k, $v ) = each %actions ) { # extra ...
if ( ( $extra & $v ) != 0 ) { # extra ...
say "extra can $k ? => OK"; # extra ...
} # extra ...
else {
say "extra can $k ? => NG";
}
}
ページ名: