Я думаю, что когда вы определяете String
, вы определяете объект. Поэтому вам нужно использовать .equals()
. Когда вы используете примитивные типы данных, вы используете ==
, но с String
(и любым объектом) вы должны использовать .equals()
.
Если требуется избежать магических чисел, попробуйте модуль CPAN Число:: Байты:: Человек .
use Number::Bytes::Human qw(format_bytes);
my $size = format_bytes(-s $file); # 4.5M
Вы могли, конечно, создать функцию для вычисления этого. Это - лучшее решение, чем создание констант в этом экземпляре.
sub size_in_mb {
my $size_in_bytes = shift;
return $size_in_bytes / (1024 * 1024);
}
Никакая потребность в константах. Изменение 1024
к некоторому переменному/постоянному не сделает этот код более читаемым.
Ну, нет 1 024 байтов в meg, существует 1 024 байта в K и 1024 K в meg...
Тем не менее 1024 безопасное "волшебное" число, которое никогда не будет изменяться ни в какой системе, в которой можно ожидать, что программа будет работать.
Я считал бы это в переменную, а не использовал бы магическое число. Даже если магические числа не собираются изменяться, как число байтов в мегабайте, использование хорошо именованной константы является хорошей практикой, потому что это делает Ваш код более читаемым. Это сразу делает его очевидным для всех других, каково Ваше намерение.
?&v=1
до конца.
– Daniel Kaplan
9 October 2013 в 13:09
1) Вы не хотите 1024. Это дает Вам килобайты. Вы хотите 1024*1024, или 1048576.
2), Почему был бы, делясь на магическое число быть плохой идеей? Это не похоже на число байтов в мегабайте, будет когда-либо изменяться. Не сверхдумайте вещи слишком много.
Не понимайте меня превратно, но: Я думаю, что объявление 1024 как Волшебная Переменная немного заходит слишком далеко, это немного похоже "на $ONE = 1; $TWO = 2"; и т.д.
Килобайт А был ложно объявлен как 1 024 байта больше чем с 20 лет, и я серьезно сомневаюсь, что производители операционной системы будут когда-либо исправлять ту ошибку и изменять ее на 1 000.
, Что могло иметь смысл, хотя должен объявить неочевидный материал, как "$megabyte = 1024 * 1024", так как это более читаемо, чем 1048576.
Так как-s оператор возвращает размер файла в байтах, необходимо, вероятно, делать что-то как
my $size_in_mb = (-s $fh) / (1024 * 1024);
и использовать интервал () при необходимости в круглом числе. Это не похоже на размеры КБ, или МБ собирается измениться в любое время в ближайшем будущем :)