blockquote>
+
для следующего брата. Есть ли эквивалент для предыдущего брата?Вы можете использовать два селектора ax :
!
и?
Там 2 следующие селекторные функции для сиблинга в обычном CSS:
+
является непосредственным последующим селектором сиблинга~
является любым последующим селектором сиблинга. В обычном CSS нет предыдущего селектора sibling.
Однако в ax CSS послепроцессорной библиотеки есть 2 предыдущие селекторные функции:
?
- это предыдущий селектор немедленного (напротив+
)!
является любым предыдущим селектором (см.~
)Рабочий пример:
В следующем примере:
.any-subsequent:hover ~ div
выбирает любой последующийdiv
.immediate-subsequent:hover + div
выбирает немедленный последующийdiv
.any-previous:hover ! div
выбирает любой предыдущийdiv
.immediate-previous:hover ? div
выбирает непосредственный предыдущийdiv
div { display: inline-block; width: 60px; height: 100px; color: rgb(255, 255, 255); background-color: rgb(255, 0, 0); text-align: center; vertical-align: top; cursor: pointer; opacity: 0; transition: opacity 0.6s ease-out; } code { display: block; margin: 4px; font-size: 24px; line-height: 24px; background-color: rgba(0, 0, 0, 0.5); } div:nth-of-type(-n+4) { background-color: rgb(0, 0, 255); } div:nth-of-type(n+3):nth-of-type(-n+6) { opacity: 1; } .any-subsequent:hover ~ div, .immediate-subsequent:hover + div, .any-previous:hover ! div, .immediate-previous:hover ? div { opacity: 1; }
<h2>Hover over any of the blocks below</h2> <div></div> <div></div> <div class="immediate-previous">Hover for <code>?</code> selector</div> <div class="any-previous">Hover for <code>!</code> selector</div> <div class="any-subsequent">Hover for <code>~</code> selector</div> <div class="immediate-subsequent">Hover for <code>+</code> selector</div> <div></div> <div></div> <script src="https://rouninmedia.github.io/axe/axe.js"></script>
Так как brian, кажется, спит прямо сейчас, вот указатель на то, что он называет modulinos. Это - в основном рецепт для создания сценариев, которые действуют как модули или модули, которые могут быть выполнены как сценарии. Звуки точно как то, что Вы ищете.
Perl Освоения является определенно книгой, которую стоит прочитать (и купить).
(я не хочу разделять сценарий на отдельный модуль и “executable”, так как я планирую распределить сценарий как единственный файл.)
Большинство людей сшивает файлы вместе как это во время изготовления. Приложение:: Ack на CPAN является примером чего-то, что может быть создано как это.
, Если Вы действительно хотите протестировать свое приложение правильно, необходимо поместить функциональность в модуль, и затем записать Тест:: больше сценарий тестирования, который осуществляет функции, которые обеспечивает модуль. Тогда фактический сценарий является просто тонкой оберткой вокруг модуля, обычно что-то как:
#!/usr/bin/env perl
use Your::Class;
Your::Class->new(args => \@ARGV)->run;
См. также: MooseX:: Getopt.
Это зависит от того, хотите ли Вы протестировать сам сценарий или протестировать нижние индексы, которые составляют сценарий. Если бы Вы хотите протестировать сценарий, то внешний тест был бы более соответствующим, например, сценарий оболочки. Если Вы хотите протестировать функции, которые составляют сценарий, то можно или записать те тесты как большее количество функций в рамках сценария или осуществить рефакторинг элементы в модуль Perl и протестировать модуль (который Вы говорите, что не хотите делать).
, Если сценарий является достаточно маленьким, то рефакторинг не мог бы быть необходимым. Просто добавьте '-тест' параметр командной строки и вызов в тест sub, который в свою очередь тестирует все остальное. При выполнении этого мне нравится распечатывать индикатор хода выполнения некоторого вида (например, a'.' для каждого теста, который передает).
, Если сценарий более сложен, тем не менее, можно хотеть рассмотреть биты рефакторинга в один или несколько модулей и тестирования их с Тест:: Простой или Тест:: Больше .
Почему не запись набора тестов в сценарии оболочки, со сценарием Perl, названным как какая-либо другая команда оболочки?