Jak mogę wykonać "płytkie" sprawdzanie składni w plikach perla. Standardowy perl -c
jest przydatny, ale sprawdza składnię importu. Czasem jest to miłe, ale nie świetne, gdy pracujesz w repozytorium kodu i przenosisz do działającego środowiska, a masz funkcję zdefiniowaną w repozytorium, ale jeszcze nie przekazaną do działającego środowiska. Nie powiedzie się sprawdzanie funkcji, ponieważ ścieżki systemowe odniesienia importu (tj. Użyj Custom :: Project :: Lib qw (foo bar baz)).Kontrola płytkiej składni Perla? to znaczy. nie sprawdzaj składni importu
Odpowiedz
Nie można praktycznie zrobić, ponieważ import ma możliwość wpływania na parsowanie kodu, który następuje. Na przykład use strict
czyni go tak, gołe słowa nie są analizowane jako ciągi znaków (i zmienia zasady jak zmienna nazwy mogą być używane), use constant
powoduje stałe subs być zdefiniowane i use Try::Tiny
zmienia parse wyrażeń udziałem try
, catch
lub finally
(dając im prototypy &
). Mówiąc bardziej ogólnie, dowolny moduł, który eksportuje cokolwiek do przestrzeni nazw wywołującego, może wpływać na parsowanie, ponieważ parser perl rozróżnia niejednoznaczność na różne sposoby, gdy nazwa odwołuje się do istniejącego podprocedury, niż gdy nie.
Zgaduję, że można utworzyć stubs dla brakujących bibliotek w katalogu domowym.
Istnieją dwa problemy z tym:
Jak nie fail
-c
jeśli wymagane moduły brakuje?Istnieją dwa rozwiązania:
A. Dodaj fałszywy moduł/odgałęzienie w produkcji
B. We wszystkich modułach, użyć specjalnego catch-all wpis @ INC podprogramu (przy użyciu kanapki w
@INC
jest wyjaśniono here). To oczywiście ma problem z tym, że moduł NIE zawiedzie w rzeczywistym środowisku wykonawczym, jeśli brakuje bibliotek - DoublePlusNotGood w mojej książce.Nawet jeśli w jakiś sposób można pominąć brakujące moduły, nadal nie można użyć identyfikatorów zaimportowanych z brakującego modułu lub użyć jawnie z przestrzeni nazw tego modułu.
Jedynym realistycznym rozwiązaniem jest powrót do # 1a i użycie fałszywego modułu pośredniczącego, ale tym razem, który ma zadeklarowany i (w razie potrzeby) wyeksportowany identyfikator dla każdego interfejsu publicznego. Na przykład. niepoprawne zmienne lub zmienne atrapa.
Jednak nawet to nie powiedzie się dla niektórych zaawansowanych modułów dynamicznie określają co do stworzenia własnej przestrzeni nazw, a co do eksportu w czasie wykonywania (a kod dzwoniący mógł dynamicznie określić, które subs zadzwonić - Heck, czasami, które moduły importować).
Ale to podejście będzie działać dobrze w przypadku zwykłego "OO/podobnego do C" OO lub kodu proceduralnego, który wywołuje tylko statycznie nazwane predefiniowane publiczne subskrypcje, metody i dostęp do eksportowanych zmiennych.
Sugerowałbym, że lepiej włączyć repozytorium kodu do sprawdzania składni. perl -I/path/to/working/code/repo/local_perl/ -c
lub ustaw PERL5LIB=/path/to/working/code/repo/local_perl/
przed uruchomieniem perl -c
. Każda z tych opcji powinna umożliwić ci sprawdzenie kodu działającego, zakładając, że masz go w strukturze katalogów podobnej do twojego aktywnego kodu.
Czy zapoznałeś się z PPI? Wydaje mi się, że podąża za importowaniem, ale być może łatwiej byłoby go zmodyfikować, aby odgadnąć, co wygląda jak nazwa funkcji.
- 1. składni heredoc błąd składni
- 2. Błąd składni SQL błąd tworzenia składni
- 3. To konfiguracja "Błąd składni: nieoczekiwany eksport tokenu"
- 4. Co to jest wykorzystanie abstrakcyjnych drzew składni?
- 5. C# - doskonałe podświetlanie składni
- 6. Bezpłatne podświetlanie składni .NET Editor
- 7. Analizator składni How To in .NET
- 8. błąd składni: błąd składni, nieoczekiwany T_SL na linii 23
- 9. Jak zmniejszyć drzewo składni do abstrakcyjnego drzewa składni?
- 10. Dlaczego wyjście w instrukcji switch alternate-składni spowodować błąd składni
- 11. Błąd składni MySQL delimiter
- 12. ALTER TABLE składni
- 13. Błąd analizy składni HTML
- 14. Sprawdź błędy składni PHP?
- 15. vim podświetlanie składni vim
- 16. Analizowanie składni nagłówka
- 17. Zrozum linq składni
- 18. AsNoTracking przy użyciu składni zapytania LINQ zamiast składni Metody
- 19. Hash składni w Ruby
- 20. g ++ Błąd składni w „:”
- 21. Błąd analizy składni PHP: błąd składni, nieoczekiwane "?" w helpers.php 233
- 22. Różnice w składni NSDateComponents?
- 23. Zrozumienie składni programowania C
- 24. szyny szczupły błędach składni
- 25. dołączyć składni w dostępie
- 26. PostgreSQL „IF” błąd składni
- 27. Błąd składni: Plik do importu nie znaleziony lub nieczytelny: podstawa/wspólne/współczynniki
- 28. Typescript składni podkreślając vim
- 29. Jak utworzyć analizator składni AST, który dopuszcza błędy składni?
- 30. błąd składni, nieoczekiwany ",", oczekiwanie ")"
Dziękuję za szczegółową dyskusję, doceniam to –